'的意外行为;cmake-E比较文件';在add_test()中
我试图使用CTest('的意外行为;cmake-E比较文件';在add_test()中,cmake,ctest,Cmake,Ctest,我试图使用CTest(add_test())将代码输出与参考文本进行比较,但得到了一些奇怪的结果,这让我觉得我没有正确使用cmake-E compare_文件。文档和示例有点单薄,我还没有找到一个类似的示例 后台故事:我正在恢复一些陈旧的FORTRAN代码,它需要通过stdin输入,并将输出写入stdout。知道在add_test()中不鼓励/不可能进行I/O重定向,我使用add_custom_command()作为可执行目标上的POST_BUILD操作来运行代码并重定向输出。正如预期的那样——
add_test()
)将代码输出与参考文本进行比较,但得到了一些奇怪的结果,这让我觉得我没有正确使用cmake-E compare_文件。文档和示例有点单薄,我还没有找到一个类似的示例
后台故事:我正在恢复一些陈旧的FORTRAN代码,它需要通过stdin
输入,并将输出写入stdout
。知道在add_test()
中不鼓励/不可能进行I/O重定向,我使用add_custom_command()
作为可执行目标上的POST_BUILD
操作来运行代码并重定向输出。正如预期的那样——没有问题
然后我设置了两个类似的测试:
比较新输出和已知的不同示例输出
添加测试(名称C1\U bad
COMMAND${CMAKE_COMMAND}-E compare_文件--忽略eol C1.OUT C1_bad.OUT
配置调试版本“”
工作目录“${MY_TEST_DIR}”
)
#比较新输出和已知相同示例输出
添加测试(名称C1\U ok
COMMAND${CMAKE_COMMAND}-E比较_文件--忽略eol C1.OUT C1_ok.OUT
配置调试版本“”
工作目录“${MY_TEST_DIR}”
)
这里比较了三个文件:
由生成后自定义命令生成-这是新的输出${MY_TEST_DIR}/C1.OUT
是从源代码树复制的,与${MY\u TEST\u DIR}/C1\u bad.OUT
不同C1.OUT
是从源代码树复制的,与${MY_TEST_DIR}/C1_ok.OUT
是二进制的(通过检查和MD5校验和确认)C1.OUT
cmake-E compare_files
会得到预期的结果-比较C1_bad.OUT
和C1.OUT
失败(即抱怨文件不同),但比较C1_ok.OUT
和C1.OUT
成功(不返回任何输出;沉默意味着成功)
我的想法是cmake-E compare_files
不会返回CTest期望的状态代码(0表示通过,非零表示失败),或者不打算与CTest一起使用。这是Windows上的3.18.1版,如果有必要的话;我在Linux上获得了与3.18.1相同的行为。如果CMake已经内置了一个跨平台的diff实用程序,我不想追踪或编写我自己的跨平台diff实用程序,但从我读到的所有信息来看,还不清楚这是否是对compare\u files
的预期或可行的使用-关于我下一步应该尝试什么的提示