3

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

我首先使用了一种简单的方法,并使用了一个标准的 Hello World 示例:My 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 的 CMake tutorial#1,但到目前为止还没有成功。

有什么建议么??提前致谢 !

4

4 回答 4

1

不是直接的答案,因为我从来没有在 cmake 中使用过 fortran,但我可以在这里看到一些问题。

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

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

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

add_executable(helloworld ${helloworld_SOURCES})

SET_TARGET_PROPERTIES(helloworld PROPERTIES LINKER_LANGUAGE FORTRAN)从主要的删除,因为它不应该是必要的。

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

于 2015-01-30T08:01:32.210 回答
0

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

于 2012-04-26T06:57:24.847 回答
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)

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

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

  1. cmake -S . -B build
  2. cmake --build build
  3. ./build/helloworld
于 2019-12-09T23:50:39.093 回答
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) 16.0.0.20150815

cmake 版本 2.8.12.2

我更喜欢使用cmake-gui. ifort在那里,您可以按如下方式定义编译器:

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

cmake-gui_01

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

cmake-gui_02

单击“完成”和“生成”。

转到build/src文件夹并执行make. helloworld可执行文件已成功生成,可以ifort在此处调用。

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

希望能帮助到你。

于 2019-11-12T09:55:46.430 回答