2012-10-03 148 views
1

與cmake聲稱的一樣,它的文檔似乎留下了許多不足之處(除非我完全不理解基礎知識)。我試圖寫一個fortran程序,也依賴於一些其他庫(這是已經編譯爲我的系統,但我也想爲這些庫的cmake文件)的Fortran程序集的cmake文件。與fortran一起使用cmake

很多,我在例子已經在網上找到沒有出現在官方的文檔的命令,這是一個有點令人不安。例如,http://www.vtk.org/Wiki/CMakeForFortranExample包含行

get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) 

然而,當我包括這在我自己的CMakeLists.txt我得到一個錯誤

Missing variable is: 
CMAKE_fortran_COMPILER 

我錯過了什麼?!

編輯:當前的CMakeLists.txt

cmake_minimum_required(VERSION 2.6) 

enable_language(fortran) 
project(fortranTest) 
get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) 

編輯2

我還沒有制定出如何將依賴庫。

+0

檢查文件中找到你做任何你'ENABLE_LANGUAGE(Fortran語言)'之前?我們成功地將CMake用於一個非常大的Fortran流體動力學代碼,但很少有問題(與Fortran無關)。 – tpg2114

+0

另外,你可以編輯你的文章,包括你的CMakeLists.txt? 'fortran'中的錯誤有一個小寫'f',而你的示例行有一個大寫'F'。此外,還有更好的方式來做這個例子試圖處理這些信息的例子,比如'if($ {CMAKE_Fortran_COMPILER_ID} STREQUAL「Intel」)''''''''''如果可執行文件名爲funny,它用'ftn'包裹)。 – tpg2114

+0

@ tpg2114是的,我願意 - 我編輯了我的問題以顯示我目前得到的內容 – ChrisW

回答

4

語言名稱區分大小寫。張貼,我得到:

~/cmt> cmake ./ 
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly. 
Missing variable is: 
CMAKE_fortran_COMPILER_ENV_VAR 
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly. 
Missing variable is: 
CMAKE_fortran_COMPILER 
CMake Error: Could not find cmake module file:/home/tgallagher/cmt/CMakeFiles/CMakefortranCompiler.cmake 
CMake Error: Could not find cmake module file:CMakefortranInformation.cmake 
CMake Error: CMAKE_fortran_COMPILER not set, after EnableLanguage 
-- The C compiler identification is GNU 
-- The CXX compiler identification is GNU 
-- Check for working C compiler: /usr/bin/gcc 
-- Check for working C compiler: /usr/bin/gcc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: /usr/bin/c++ 
-- Check for working CXX compiler: /usr/bin/c++ -- works 
-- Detecting CXX compiler ABI info 
^C 

然而,通過改變文件(注意這是Fortran,而不是fortranenable_language()

cmake_minimum_required(VERSION 2.6) 

enable_language(Fortran) 
project(fortranTest) 
get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) 

你得到:

~/cmt> cmake ./ 
-- The Fortran compiler identification is GNU 
-- Check for working Fortran compiler: /usr/bin/gfortran 
-- Check for working Fortran compiler: /usr/bin/gfortran -- works 
-- Detecting Fortran compiler ABI info 
-- Detecting Fortran compiler ABI info - done 
-- Checking whether /usr/bin/gfortran supports Fortran 90 
-- Checking whether /usr/bin/gfortran supports Fortran 90 -- yes 
-- The C compiler identification is GNU 
-- The CXX compiler identification is GNU 
-- Check for working C compiler: /usr/bin/gcc 
^C 

其中,如果允許完成,將按預期工作,但是,爲了確定編譯器標誌,有更好的方法來識別編譯器。示例僅適用於編譯器未包裝的系統,這意味着系統不會通過類似於Cray上的mpif90ftn來調用編譯器。更好的方法是檢查:

if(${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") 
... 
endif() 

可能的名稱列表可以通過CMake的模塊目錄Modules/CMakeFortranCompilerId.F.in

+0

謝謝:)我讀過的命令是不區分大小寫的,我也有(錯誤!)假設這意味着整個文件不區分大小寫 – ChrisW

+0

謝謝 - 特別是關於識別編譯器的那一點。 – jvriesem