Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing CMake如何使用单元测试安装测试文件_Unit Testing_Cmake - Fatal编程技术网

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

Unit testing CMake如何使用单元测试安装测试文件,unit-testing,cmake,Unit Testing,Cmake,我正在使用CMake构建我的系统和单元测试 我也在做一个源代码外的构建 我发现使用ADD_TEST()命令,您不需要安装测试可执行文件(它只在运行make install时运行,这很好) 然而,我的单元测试依赖于一些输入文件,这些文件需要复制到构建可执行文件的地方 据我所知,我不能使用INSTALL()将文件复制到那里,因为我没有指定文件的位置-这取决于调用build命令的位置 有什么方法可以让CMake将测试文件复制到生成可执行文件的同一位置吗?当然,您可以在配置步骤中这样做: execute

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

我也在做一个源代码外的构建

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

然而,我的单元测试依赖于一些输入文件,这些文件需要复制到构建可执行文件的地方

据我所知,我不能使用INSTALL()将文件复制到那里,因为我没有指定文件的位置-这取决于调用build命令的位置


有什么方法可以让CMake将测试文件复制到生成可执行文件的同一位置吗?

当然,您可以在配置步骤中这样做:

execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${fileFrom} ${fileTo})
如果您的输入文件依赖于生成生成的内容,则可以为其创建目标并将其添加到
all
目标:

add_custom_target(copy_my_files ALL
    COMMAND ${CMAKE_COMMAND} -E copy_if_different ${fileFrom} ${fileTo}
    DEPENDS ${fileFrom}
)

您可以将配置_文件与参数COPYONLY一起使用。并执行复制到构建目录:${CMAKE_CURRENT_BINARY_dir}

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

file(COPY my_directory DESTINATION ${CMAKE_CURRENT_BINARY_DIR})

这似乎起到了作用。

这个问题已经很老了,但在我看来,有一个更好的解决方案,比将需要的文件复制到
${CMAKE\u CURRENT\u BINARY\u DIR}
更好。
add_test
命令有一个
WORKING_DIRECTORY
选项,允许选择运行测试的目录。因此,我建议以下解决方案:

add_executable(testA testA.cpp)
add_test(NAME ThisIsTestA COMMAND testA WORKING_DIRECTORY ${DIRECTORY_WITH_TEST_DATA})

这样可以避免不必要地复制输入文件。

要在生成时复制整个目录(并且只有在生成成功时),可以在添加目标(例如,单元测试可执行文件)后执行此操作:

add_custom_命令(目标${PROJECT_NAME}POST_BUILD
COMMAND${CMAKE_COMMAND}-E copy_目录
${CMAKE_CURRENT_SOURCE_DIR}/testDataDir$/testDataDir)

有效,但复制发生在配置时。在防止复制所有测试数据的同时,您要冒测试改变实际测试数据的风险。
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
    ${CMAKE_CURRENT_SOURCE_DIR}/testDataDir $<TARGET_FILE_DIR:${PROJECT_NAME}>/testDataDir)