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
'的意外行为;cmake-E比较文件';在add_test()中_Cmake_Ctest - Fatal编程技术网

'的意外行为;cmake-E比较文件';在add_test()中

'的意外行为;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操作来运行代码并重定向输出。正如预期的那样——

我试图使用CTest(
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
    是从源代码树复制的,与
    C1.OUT
    是二进制的(通过检查和MD5校验和确认)
出乎意料的是,两个测试都失败了,而不仅仅是第一个。从命令行对每对文件运行
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
的预期或可行的使用-关于我下一步应该尝试什么的提示