- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为“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
project(foo)
...
add_test(NAME test1 COMMAND ./foo ../test/in.txt > ../test/out.txt)
enable_testing()
make test
时,测试本身失败。似乎是 cmake 命令
add_test
支持命令行参数,但不支持重定向。我试过引用并逃避成功。由于我无法通过这部分,因此我没有尝试使用 diff。我只是想象我可以像使用 bash 一样使用 & 将 foo 和 diff 打包在一行中。那将是第二步。
最佳答案
把我的评论变成答案
正如@Tsyvarev 所说,CTest 命令不在 shell 的上下文中运行。但是您可以添加自己需要的 shell 并使用例如sh
作为要使用 add_test()
调用的命令.
我已经用您的示例代码运行了一些测试,以下确实成功了:
add_test(NAME test1 COMMAND sh -c "$<TARGET_FILE:foo> ../test/in.txt > ../test/out.txt")
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()
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
)
关于cmake - 如何在 cmake add_test 中使用重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36304289/
我有一个名为“foo”的控制台应用程序,它将引用文本文件作为输入(in.txt)并在标准输出中生成文本(我想保留这种行为)。 在 make(不是 cmake)中,我使用了一个测试目标,它调用 foo
在 CMake 中我有一个函数: function(add_mpi_test name no_mpi_proc) include_directories(...) add_executable
我在 cmake 中看过几次 add_test 我很困惑,因为我正在使用 googletest 而我还没有需要一次调用 add_test。有人可以解释为什么吗?这是直接由 googletest 处理还
我似乎无法弄清楚如何在 cmake 中使用 add_test 传递 ${CTEST_CONFIGURATION_TYPE} 而无需 CMake 添加额外的转义字符。 我目前正在使用 cmake 生成
我是一名优秀的程序员,十分优秀!