2012-09-07 112 views
5

我正在使用CMake来构建我的系统和我的单元测试。CMake如何使用单元测试安装测试文件

我也在做一个out-of-source构建。

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

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

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

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

回答

1

这可能不是最好的解决办法,但目前我在做这个:

file(COPY my_directory DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 

这似乎是做的伎俩。

+1

有效,但复制发生在配置时。 – fgiraldeau

3

当然,你可以做到这一点的配置步骤是这样的:

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} 
) 
+0

变量'CMAKE_PROGRAM'应该是'CMAKE_COMMAND'。 – fgiraldeau

7

您可以使用configure_file与参数COPYONLY。并执行复制到你的build目录:$ {} CMAKE_CURRENT_BINARY_DIR

+0

示例:http://stackoverflow.com/a/1587317/1808261 – dtmland

0

这个问题是相当古老的,但在我看来,有比复制所需文件${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}) 

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