mirror of
https://github.com/Kitware/CMake.git
synced 2026-06-28 10:48:07 +00:00
104 lines
3.0 KiB
ReStructuredText
104 lines
3.0 KiB
ReStructuredText
create_test_sourcelist
|
|
----------------------
|
|
|
|
Create a test driver program that links together many small tests into a
|
|
single executable. This is useful when building static executables with
|
|
large libraries to shrink the total required size.
|
|
|
|
.. signature::
|
|
create_test_sourcelist(<sourceListName> <driverName> <test>... <options>...)
|
|
:target: original
|
|
|
|
Generate a test driver source file from a list of individual test sources
|
|
and provide a combined list of sources that can be built as an executable.
|
|
|
|
The options are:
|
|
|
|
``<sourceListName>``
|
|
The name of a variable in which to store the list of source files needed
|
|
to build the test driver. The list will contain the ``<test>...`` sources
|
|
and the generated ``<driverName>`` source.
|
|
|
|
.. versionchanged:: 3.29
|
|
|
|
The test driver source is listed by absolute path in the build tree.
|
|
Previously it was listed only as ``<driverName>``.
|
|
|
|
``<driverName>``
|
|
Name of the test driver source file to be generated into the build tree.
|
|
The source file will contain a ``main()`` program entry point that
|
|
dispatches to whatever test is named on the command line.
|
|
|
|
``<test>...``
|
|
Test source files to be added to the driver binary. Each test source
|
|
file must have a function in it that is the same name as the file with the
|
|
extension removed. For example, a ``foo.cxx`` test source might contain:
|
|
|
|
.. code-block:: c++
|
|
|
|
int foo(int argc, char** argv)
|
|
|
|
``EXTRA_INCLUDE <header>``
|
|
Specify a header file to ``#include`` in the generated test driver source.
|
|
|
|
``FUNCTION <function>``
|
|
Specify a function to be called with pointers to ``argc`` and ``argv``.
|
|
The function may be provided in the ``EXTRA_INCLUDE`` header:
|
|
|
|
.. code-block:: c++
|
|
|
|
void function(int* pargc, char*** pargv)
|
|
|
|
This can be used to add extra command line processing to each test.
|
|
|
|
Additionally, some CMake variables affect test driver generation:
|
|
|
|
.. variable:: CMAKE_TESTDRIVER_BEFORE_TESTMAIN
|
|
|
|
Code to be placed directly before calling each test's function.
|
|
|
|
.. variable:: CMAKE_TESTDRIVER_AFTER_TESTMAIN
|
|
|
|
Code to be placed directly after the call to each test's function.
|
|
|
|
The generated test driver supports the following command-line arguments:
|
|
|
|
``<name>``
|
|
Run the test with the exact name ``<name>`` (case-insensitive).
|
|
|
|
``-R <substr>``
|
|
Run the first test whose name contains ``<substr>`` (case-insensitive).
|
|
|
|
``-A [<skip_test>...]``
|
|
.. versionadded:: 3.21
|
|
|
|
Run all tests and print results in `TAP <https://testanything.org/>`_
|
|
format.
|
|
|
|
Any additional arguments after ``-A`` are interpreted as exact test names
|
|
to skip.
|
|
|
|
``-N``
|
|
.. versionadded:: 4.4
|
|
|
|
List all available test names (one per line) and exit.
|
|
|
|
Example
|
|
^^^^^^^
|
|
|
|
.. code-block:: cmake
|
|
|
|
create_test_sourcelist(SRCS main.c test1.c test2.c)
|
|
add_executable(MyTests ${SRCS})
|
|
discover_tests(COMMAND MyTests
|
|
DISCOVERY_ARGS -N
|
|
DISCOVERY_MATCH "^(.+)$"
|
|
TEST_NAME "${PROJECT_NAME}.\\1"
|
|
TEST_ARGS "\\1"
|
|
)
|
|
|
|
See Also
|
|
^^^^^^^^
|
|
|
|
* :command:`discover_tests`
|