2014-08-27 99 views
2

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

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

if (Fortran_COMPILER_NAME MATCHES "gfortran.*") 

然而,这不能调用条件,因为CMake的决定使用f95。当然,f95发生在别名gfortran,但CMake没有检测到。

什么是正确的方法来做到这一点?

回答

5

您可以使用也可以使用CMAKE_Fortran_COMPILER_ID

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

最好的办法是阅读文件CMakeDetermineFortranCompiler.cmake并从它引用的相关文件。

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() 

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

0

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