/
niceSOFT
/
cmake
Обзор
Документация
Войти
/
niceSOFT
/
cmake
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Help/command/add_test.rst
164 строки
6 KB
Martin Duffy
ctest: Add --out-of-date option for running out of date tests
30 июн 2026, 18:31
30 июн 2026, 18:31
e11b582
Код
Авторство
О чём код?
add_test -------- Add a test to the project to be run by :manual:`ctest(1)`. .. code-block:: cmake add_test(NAME <name> COMMAND <command> [<arg>...] [CONFIGURATIONS <config>...] [WORKING_DIRECTORY <dir>] [COMMAND_EXPAND_LISTS] [BUILD_DEPENDS <dependencies>...]) Adds a test called ``<name>``. The test name may contain arbitrary characters, expressed as a :ref:`Quoted Argument` or :ref:`Bracket Argument` if necessary. See policy :policy:`CMP0110`. CMake only generates tests if the :command:`enable_testing` command has been invoked. The :module:`CTest` module invokes ``enable_testing`` automatically unless :variable:`BUILD_TESTING` is set to ``OFF``. Tests added with the ``add_test(NAME)`` signature support using :manual:`generator expressions <cmake-generator-expressions(7)>` in test properties set by :command:`set_property(TEST)` or :command:`set_tests_properties`. Test properties may only be set in the directory the test is created in. ``add_test`` options are: ``COMMAND`` Specify the test command-line. If ``<command>`` specifies an executable target created by :command:`add_executable`: * It will automatically be replaced by the location of the executable created at build time. * .. versionadded:: 3.3 The target's :prop_tgt:`CROSSCOMPILING_EMULATOR`, if set, will be used to run the command on the host:: <emulator> <command> .. versionchanged:: 3.29 The emulator is used only when :variable:`cross-compiling <CMAKE_CROSSCOMPILING>`. See policy :policy:`CMP0158`. * .. versionadded:: 3.29 The target's :prop_tgt:`TEST_LAUNCHER`, if set, will be used to launch the command:: <launcher> <command> If the :prop_tgt:`CROSSCOMPILING_EMULATOR` is also set, both are used:: <launcher> <emulator> <command> * .. versionadded:: 4.4 When the :variable:`CMAKE_TEST_BUILD_DEPENDS` variable is enabled, the :ref:`Ninja Generators` and :generator:`FASTBuild` generate a convenience build target named ``test_prep/<name>`` that depends on the test executable target. Building this target ensures the executable is up-to-date before the test runs. Additionally, targets referenced by the test command via generator expressions are added as dependencies of the ``test_prep/<name>`` target. If multiple tests in different directories share the same name, their dependencies are merged into a single ``test_prep/<name>`` target. Tests with names that are not valid target names are excluded from this behavior. The ``BUILD_DEPENDS`` keyword can be used to add explicit build dependencies. .. versionchanged:: 4.5 :generator:`FASTBuild` and the :ref:`Makefile Generators` gained support for ``test_prep/<name>`` targets. With the Makefile generators a ``BUILD_DEPENDS`` file is built by building the target whose build produces it; a file that is not the unique output of a single target is reported with a warning, and a test whose name contains a ``:`` character is excluded. The command may be specified using :manual:`generator expressions <cmake-generator-expressions(7)>`. ``CONFIGURATIONS`` Restrict execution of the test only to the named configurations. ``WORKING_DIRECTORY`` Set the test property :prop_test:`WORKING_DIRECTORY` in which to execute the test. If not specified, the test will be run in :variable:`CMAKE_CURRENT_BINARY_DIR`. The working directory may be specified using :manual:`generator expressions <cmake-generator-expressions(7)>`. ``BUILD_DEPENDS`` .. versionadded:: 4.4 Specify a list of targets or files that must be built before the test can run. Each dependency is added to the ``test_prep/<name>`` build target described above when :variable:`CMAKE_TEST_BUILD_DEPENDS` is enabled with the :ref:`Ninja Generators`, :generator:`FASTBuild`, or :ref:`Makefile Generators`. The test name must be a valid target name in order to list build dependencies with this keyword. * .. versionchanged:: 4.5 Build dependencies added by this argument, or referenced in the test ``COMMAND`` also enable the :option:`--out-of-date <ctest --out-of-date>` behavior of :manual:`ctest(1)`. ``COMMAND_EXPAND_LISTS`` .. versionadded:: 3.16 Lists in ``COMMAND`` arguments will be expanded, including those created with :manual:`generator expressions <cmake-generator-expressions(7)>`. If the test command exits with code ``0`` the test passes. Non-zero exit code is a "failed" test. The test property :prop_test:`WILL_FAIL` inverts this logic. Note that system-level test failures such as segmentation faults or heap errors will still fail the test even if ``WILL_FAIL`` is true. Output written to stdout or stderr is captured by :manual:`ctest(1)` and only affects the pass/fail status via the :prop_test:`PASS_REGULAR_EXPRESSION`, :prop_test:`FAIL_REGULAR_EXPRESSION`, or :prop_test:`SKIP_REGULAR_EXPRESSION` test properties. .. versionadded:: 3.16 Added :prop_test:`SKIP_REGULAR_EXPRESSION` property. Example usage: .. code-block:: cmake add_test(NAME mytest COMMAND testDriver --config $<CONFIG> --exe $<TARGET_FILE:myexe>) This creates a test ``mytest`` whose command runs a ``testDriver`` tool passing the configuration name and the full path to the executable file produced by target ``myexe``. --------------------------------------------------------------------- The command syntax above is recommended over the older, less flexible form: .. code-block:: cmake add_test(<name> <command> [<arg>...]) Add a test called ``<name>`` with the given command-line. Unlike the above ``NAME`` signature, target names are not supported in the command-line. Furthermore, tests added with this signature do not support :manual:`generator expressions <cmake-generator-expressions(7)>` in the command-line or test properties, and the :prop_tgt:`TEST_LAUNCHER` and :prop_tgt:`CROSSCOMPILING_EMULATOR` target properties are not supported.