我在使用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,但到目前为止还没有成功。
任何建议?提前谢谢!
答案 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
,按“配置”,然后选择
点击“下一步”并定义以下编译器
点击“完成”并“生成”。
转到build/src
文件夹并执行make
。 helloworld
可执行文件是使用ifort
成功生成的,可以在此处调用。
提示:如果ifort
已经是Linux计算机上的默认本机编译器,则不必在cmake-gui
中指定它,可以继续选择第一个选项“使用默认本机编译器”。
希望有帮助。
答案 3 :(得分:0)
让我们逐步尝试:
1)您的Fortran大家好,世界一切顺利!
!Test helloworld in Fortran using Cmake
program hello
print *, "Hello World!"
end program hello
2)现在,让我们编写“内部” 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
# 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)最后,让我们以外包方式构建代码并运行它!
cmake -S . -B build
cmake --build build
./build/helloworld