2012-10-03 145 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