CMake Fortran编译器相关的标志

时间:2014-08-27 18:54:09

标签: cmake fortran

我正在使用CMake进行中等规模的Fortran项目;有时我用gfortran构建它,有时用ifort构建它。当我想进行调试构建时,编译器标志是不同的;我想让CMake自动检查正在使用哪个编译器并相应地设置标志。

看起来this answer显示了如何为不同的C ++编译器做同样的事情。有example如何用Fortran检查编译器,使用

if (Fortran_COMPILER_NAME MATCHES "gfortran.*")

但是,这无法调用条件,因为CMake决定使用f95。当然,f95恰好是gfortran的别名,但CMake没有检测到。{/ p>

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:6)

您也可以使用CMAKE_Fortran_COMPILER_ID

if ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Intel")
  # something
elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU")
  # something else
endif

最好的方法是读取文件CMakeDetermineFortranCompiler.cmake及其引用的相关文件。

答案 1 :(得分:0)

您应该测试您的编译器是否支持使用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()

这更安全,(我认为)更简单,因为您不需要知道哪个编译器(和版本)支持哪个标志。

答案 2 :(得分:0)

很简单。仅指示安装编译器的完整路径eg.gfortran。代码:cmake -DCMAKE_fortran_PATH = / usr / bin / gfortran