我正在使用CMake进行中等规模的Fortran项目;有时我用gfortran构建它,有时用ifort构建它。当我想进行调试构建时,编译器标志是不同的;我想让CMake自动检查正在使用哪个编译器并相应地设置标志。
看起来this answer显示了如何为不同的C ++编译器做同样的事情。有example如何用Fortran检查编译器,使用
if (Fortran_COMPILER_NAME MATCHES "gfortran.*")
但是,这无法调用条件,因为CMake决定使用f95
。当然,f95
恰好是gfortran
的别名,但CMake没有检测到。{/ p>
这样做的正确方法是什么?
答案 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