CMake Fortran 编译器相关标志

Posted

技术标签:

【中文标题】CMake Fortran 编译器相关标志【英文标题】:CMake Fortran compiler-dependent flags 【发布时间】: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 没有检测到。

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于CMake Fortran 编译器相关标志的主要内容,如果未能解决你的问题,请参考以下文章

即使在构建可执行文件时,CMake 3.0 + Fortran + CUDA也需要-fPIC

是否可以让 Fortran 源代码检测编译器标志?

用于 Ivy Bridge 架构的 GNU Fortran 编译器优化标志

如何使用MinGW gfortran通过CMake构建/编译Fortran

CMake:配置期间不同的编译器标志?

在 CMake 项目中动态更改编译器标志