使用CMake和ifort编译器

时间:2012-04-25 19:21:52

标签: cmake fortran intel-fortran

我在使用Intel 11.0编译器的Linux机器上使用CMake 2.8.7。我想第一次使用CMake,因为我想在Windows和Linux机器上构建这个项目。

我首先使用一种简单的方法并使用标准的Hello World示例: 我的src / HelloWorld.f90:

!Test helloworld in Fortran using Cmake
program hello
    print *, "Hello World!"
end program hello

我的主要CMakeLists.txt:

# States that CMake required version must be greater than 2.8.7
cmake_minimum_required(VERSION 2.8.7)
enable_language (Fortran)
project(helloworld Fortran)
add_subdirectory(src)
SET_TARGET_PROPERTIES(helloworld PROPERTIES LINKER_LANGUAGE FORTRAN)

我的src / CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.7)

# Include the directory itself as a path to include directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# For a large number of source files you can create it in a simpler way
# using file() function:
file(GLOB helloworld_SOURCES *.f90)

我仍然收到一条错误消息,指出CMAKE_FORTRAN_LINK_EXECUTABLE变量丢失了。我看了Abinader's CMake tutorial#1,但到目前为止还没有成功。

任何建议?提前谢谢!

4 个答案:

答案 0 :(得分:0)

当设置链接器语言时,可能是大写的“FORTRAN”是问题所在。尝试将其写为“Fortran”,如enable_language语句中所示。 CMake从语言中获取它使用的变量,这会导致CMake查找CMAKE_FORTRAN_LINK_EXECUTABLE而不是CMAKE_Fortran_LINK_EXECUTABLE。

答案 1 :(得分:0)

不是一个直接的答案,因为我从未在cmake上使用fortran,但我可以在这里看到一些问题。

首先:您的目标helloworld在哪里定义? project不是目标。

其次:你在哪里使用helloworld_SOURCES变量?

尝试更常规的方式。在src / CMakeLists.txt中,在文件末尾添加以下行:

add_executable(helloworld ${helloworld_SOURCES})

同时从主要版本中移除SET_TARGET_PROPERTIES(helloworld PROPERTIES LINKER_LANGUAGE FORTRAN),因为它不是必需的。

最后建议:尽量不要使用file(GLOB )。最好手动定义所有文件的列表。

答案 2 :(得分:0)

正如Michal所提到的,add_executable必须添加到您的CMakeLists.txt。

我使用以下CMake配置文件测试了您的问题

主要CMakeLists.txt:

# States that CMake required version must be greater than 2.8.7
cmake_minimum_required(VERSION 2.8.7)
enable_language (Fortran)
project(helloworld Fortran)
add_subdirectory(src)

src / CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.7)

add_executable(helloworld HelloWorld.f90)

在Linux下为以下版本:

  

ifort(IFORT)16.0.0.20150815

     

cmake版本2.8.12.2

我更喜欢使用cmake-gui。您可以在此处定义ifort编译器,如下所示:

定义源代码和二进制文件夹后,例如build,按“配置”,然后选择

cmake-gui_01

点击“下一步”并定义以下编译器

cmake-gui_02

点击“完成”并“生成”。

转到build/src文件夹并执行makehelloworld可执行文件是使用ifort成功生成的,可以在此处调用。

提示:如果ifort已经是Linux计算机上的默认本机编译器,则不必在cmake-gui中指定它,可以继续选择第一个选项“使用默认本机编译器”。

希望有帮助。

答案 3 :(得分:0)

让我们逐步尝试:

1)您的Fortran大家好,世界一切顺利!

src / hello.f90

!Test helloworld in Fortran using Cmake
program hello
     print *, "Hello World!"
end program hello

2)现在,让我们编写“内部” CMakeLists.txt

src / CMakeLists.txt

add_executable(helloworld hello.f90)
set_target_properties(
    helloworld 

    PROPERTIES 
    LINKER_LANGUAGE Fortran
    RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build)

在这里,我们已经创建了一个executable文件,您没有在其中提问。另外,我们将其链接器语言设置为Fortran(区分大小写的参数!),并将编译后的文件的输出目录设置为

3)现在,我们将创建“主要” CMakeLists.txt

CMakeLists.txt

# States that CMake required version must be greater than 2.8.7
cmake_minimum_required(VERSION 2.8.7)

project(helloworld Fortran)

add_subdirectory(src)

在这里,我们使用内部CMakeLists.txt和编译器语言指定了src子目录-使用project()函数就足够了,不需要与enable_language()一起使用。

4)最后,让我们以外包方式构建代码并运行它!

  1. cmake -S . -B build
  2. cmake --build build
  3. ./build/helloworld
相关问题