【发布时间】:2014-09-18 11:58:47
【问题描述】:
如果我编译并运行
! main.f90
print*, 1/0
end program
使用ifort 然后我得到一个除以零的错误,退出状态为 2 (echo $?),正如预期的那样。但是,如果我使用ifort -coarray=shared 编译,那么我仍然会收到错误,但现在退出状态为 0。问题是 CTest 无法捕获错误。这是我的 CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(testing Fortran)
enable_testing()
add_executable(main EXCLUDE_FROM_ALL main.f90)
add_test(main main)
add_custom_target(check COMMAND ctest DEPENDS main)
如果我运行make check,那么输出是
100% tests passed, 0 tests failed out of 1
即使测试实际上失败了。如果我删除 -coarray=shared 或使用 gfortran,那么我会得到正确的输出
0% tests passed, 1 tests failed out of 1
如何让 CTest 报告测试失败?我做错了什么还是这是一个编译器错误?
【问题讨论】:
-
我在您的帖子中没有看到任何问题,甚至没有问号。如果您认为这是一个错误,英特尔网站上有官方错误报告论坛和支持系统。
-
我添加了一个问题,要清楚。我对 CMake 还很陌生,所以在不确定的情况下将上述内容报告为编译器错误时应该小心。
-
如果你直接从 shell 运行你的
main可执行文件,你会得到什么错误代码? -
从 shell 中我得到一个以“forrtl:严重(71):整数除以零......”开头的错误。但是,退出代码仍然是 0。
-
在 CMake/CTest 中,您可以设置测试属性以检查测试的返回状态之外的其他内容,例如在输出中找到某个正则表达式时失败/通过。如果您为损坏的示例发布
crest —verbose的输出,我们可以帮助您对 CMakeLists.txt 进行适当的修改。正如 Steve 所指出的,Fortran 中并没有真正的标准化返回状态,尤其是对于 SPMD 程序。
标签: cmake fortran intel-fortran