CMake Fortran编译器相关标志

5
我正在使用CMake构建一个中等规模的Fortran项目;有时我会用gfortran进行构建,有时则使用ifort。当我想要进行调试构建时,编译器标志不同;我希望CMake可以自动检查使用的编译器并相应地设置标志。
看起来这个答案展示了如何为不同的C++编译器执行相同的操作。有一个使用Fortran检查编译器的示例
if (Fortran_COMPILER_NAME MATCHES "gfortran.*")

然而,这并未激活条件语句,因为CMake决定使用f95。当然,f95偶然是gfortran的别名,但CMake没有检测到。

正确的做法是什么?

3个回答

9
您可以使用CMAKE_Fortran_COMPILER_ID
if ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Intel")
  # something
elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU")
  # something else
endif

最好的方法是阅读文件CMakeDetermineFortranCompiler.cmake以及从中引用的相关文件。


3
不要试图为不同的编译器特殊设计,而应该使用 check_fortran_compiler_flag 测试编译器是否支持你要设置的标志,如下所示:
include(CheckFortranCompilerFlag)
check_fortran_compiler_flag("-my-flag" _my_flag)
if(_my_flag)
  set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -my-flag")
endif()

我认为这样更加安全和简单,因为您无需了解哪个编译器(以及版本)支持哪个标志。


0

很简单。只需指定编译器的完整路径,例如gfortran。代码:cmake -DCMAKE_fortran_PATH=/usr/bin/gfortran


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接