【问题标题】:CMake Fortran compiler-dependent flagsCMake Fortran 编译器相关标志
【发布时间】:2014-08-27 18:54:09
【问题描述】:

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

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

if (Fortran_COMPILER_NAME MATCHES "gfortran.*")

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

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

【问题讨论】:

    标签: cmake fortran


    【解决方案1】:

    你也可以使用CMAKE_Fortran_COMPILER_ID:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多