Kağ*_*yal 4 integration-testing makefile cmake
我有一个名为“ foo”的控制台应用程序,该应用程序将参考文本文件作为输入(in.txt),并在标准输出处生成文本(我想保持这种行为)。
在make(不是cmake)中,我使用一个测试目标,该目标调用foo并将输出重定向到文件(out.txt),如下所示。然后,我使用diff将文件out.txt与预期的参考(ref.txt)进行比较
test:
./foo -a test/in.txt > test/out.txt
diff test/out.txt test/ref.txt
Run Code Online (Sandbox Code Playgroud)
使用make可以正常工作。现在我的问题是;我如何使用cmake创建类似的Makefile?
我在一个称为build的子目录中尝试
project(foo)
...
add_test(NAME test1 COMMAND ./foo ../test/in.txt > ../test/out.txt)
enable_testing()
Run Code Online (Sandbox Code Playgroud)
使用cmake版本3.5,我得到的Makefile没有错误,但调用时make test,测试本身失败。似乎cmake命令add_test支持命令行参数,但不支持重定向。我尝试使用引号并逃脱成功。由于我无法通过这部分,因此我没有尝试使用diff。我只是想象我可以像使用bash一样使用&将foo和diff打包在一起。那将是第二步。
把我的评论变成答案
正如@Tsyvarev所说,CTest命令不在外壳的上下文中运行。但是您可以自己添加所需的shell并使用例如sh作为与一起调用的命令add_test()。
我已经用您的示例代码运行了一些测试,以下代码成功运行:
add_test(NAME test1 COMMAND sh -c "$<TARGET_FILE:foo> ../test/in.txt > ../test/out.txt")
Run Code Online (Sandbox Code Playgroud)
该解决方案不是独立于平台的(取决于在sh搜索路径中是否可用)。
因此,如果您想更加灵活,可以执行以下操作:
include(FindUnixCommands)
file(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/test/in.txt" _in)
file(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/test/out.txt" _out)
if (BASH)
add_test(
NAME test1
COMMAND ${BASH} -c "$<TARGET_FILE:foo> ${_in} > ${_out}"
)
else()
if (WIN32)
add_test(
NAME test1
COMMAND ${CMAKE_COMMAND} -E chdir $<TARGET_FILE_DIR:foo> $ENV{ComSpec} /c "$<TARGET_FILE_NAME:foo> ${_in} > ${_out}"
)
else()
message(FATAL_ERROR "Unknown shell command for ${CMAKE_HOST_SYSTEM_NAME}")
endif()
endif()
Run Code Online (Sandbox Code Playgroud)
此外,还有执行更加独立于平台的可能性diff有${CMAKE_COMMAND} -E compare_files <file1> <file2>。因此,您可以使用以下命令在CMake中简化完整的基于makefile的示例:
add_custom_command(
TARGET foo
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "Running $<TARGET_FILE_NAME:foo> ..."
COMMAND foo in.txt > out.txt
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test
)
add_test(
NAME test1
COMMAND ${CMAKE_COMMAND} -E compare_files in.txt out.txt
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test
)
Run Code Online (Sandbox Code Playgroud)
参考文献
| 归档时间: |
|
| 查看次数: |
2525 次 |
| 最近记录: |