CMake如何使用单元测试安装测试文件

Ale*_*lex 7 unit-testing cmake

我正在使用CMake来构建我的系统和我的单元测试.

我也在做一个源外构建.

我发现使用ADD_TEST()命令,您不需要安装测试可执行文件(它将在您运行make install时运行,这很棒).

但是,我的单元测试依赖于一些输入文件,这些文件需要复制到构建可执行文件的位置.

据我所知,我不能使用install()将文件复制一份,因为我还没有指定的地方还有就是-这取决于在构建命令被调用.

有什么方法可以告诉CMake将我的测试文件复制到它构建可执行文件的同一位置吗?

Ale*_*xey 7

您可以将configure_file与参数COPYONLY一起使用.并执行复制到您的构建目录:$ {CMAKE_CURRENT_BINARY_DIR}


Ale*_*lex 7

这可能不是最好的解决方案,但目前我正在这样做:

file(COPY my_directory DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)

这似乎起到了作用。

  • 有效,但复制发生在配置时。 (3认同)

mag*_*ter 6

这个问题已经很老了,但在我看来,有一个比复制您需要的文件更好的解决方案${CMAKE_CURRENT_BINARY_DIR})。该add_test命令有一个WORKING_DIRECTORY选项,允许选择运行测试的目录。所以我会建议以下解决方案:

add_executable(testA testA.cpp)
add_test(NAME ThisIsTestA COMMAND testA WORKING_DIRECTORY ${DIRECTORY_WITH_TEST_DATA})
Run Code Online (Sandbox Code Playgroud)

这可以避免对输入文件进行不必要的复制。

  • 在防止复制所有测试数据的同时,您将面临测试更改实际测试数据的风险。 (2认同)