2014-08-27 98 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