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
用于 Ivy Bridge 架构的 GNU Fortran 编译器优化标志