从cmake使用的构建目录以外的目录运行ctest?

use*_*687 10 cmake ctest

我希望能够以类似的方式,我可以运行cmake

cmake -H<src-directory> -B<bld-directory> cmake --build <bld_directory>

跑得ctest

ctest --build <bld_directory>

显然是ctest从遗嘱运行,但如果我能告诉ctest在哪里查找其配置文件以及测试可执行文件所在的位置,那将会很好.

如果可能的话,那么从文档中就不太清楚(或者我可能没有找到正确的位置).

如果有人可以说明这是否可行,那会很棒吗?非常感谢,吉里

phc*_*dan 14

因为 CMake 3.20ctest有这个选项--test-dir

--test-dir <dir> Specify the directory in which to look for tests.
Run Code Online (Sandbox Code Playgroud)

对于 3.20 之前的 CMake:

我找不到通过ctest选项来做到这一点的方法,但使用make test链接到 ctest的规则是可行的。

Makefile由 cmake 生成的构建文件夹中,您可以找到规则:

#Special rule for the target test
test:
    @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..."
    /usr/bin/ctest --force-new-ctest-process $(ARGS)
.PHONY : test
Run Code Online (Sandbox Code Playgroud)

make提供您想要的选项,您-C /path/to/build_directory/可以添加任何ctest选项ARGS='your ctest options here'

例如,您可以从系统中的任何目录编写:

make test -C /path/to/build_folder ARGS='-R SpecificTestIWantToRun -VV'

或者

cmake --build <bld_directory> --target test -- ARGS="<ctest_args>"

另一种没有make, 的方法是在终端中使用括号来创建子shell。这将在不更改当前 shell 的文件夹的情况下执行命令。

(cd $build_folder; ctest -V)
Run Code Online (Sandbox Code Playgroud)