CMake、Fortran 2008和.f08文件扩展名

3

我正在尝试配置一个Fortran 2008项目来使用CMake;该项目中的文件扩展名为“.f08”。然而,即使是“hello world”示例,我也无法让CMake正常工作。以下是我的CMakeLists.txt文件的相关部分:

cmake_minimum_required(VERSION 2.8)

project (hello)
enable_language (Fortran)

set (CMAKE_Fortran_SOURCE_FILE_EXTENSIONS ${CMAKE_Fortran_SOURCE_FILE_EXTENSIONS} "f08;F08")

add_executable ("hello-world" "hello-world.f08")
set_target_properties (hello-world PROPERTIES LINKER_LANGUAGE Fortran)

三点要注意:

  1. 生成的Makefile没有将"hello-world.f08"编译成目标文件。
  2. "set_target_properties"是必需的。否则,CMake会报告它无法确定目标"hello-world"的链接器语言。
  3. 将文件重命名为"hello-world.f95"并在CMakeLists.txt中对应更改可以使事情顺利进行。甚至不再需要"set_target_properties"命令。

8
只需要给自由格式的Fortran源代码文件加上“.f90”扩展名即可。通常认为使用扩展名来指示语言标准级别是错误的,不建议这样做。 - IanH
1
补充一下@IanH的观点,有些编译器会拒绝使用像.f08这样的扩展名。特别是ifort会报错,显示ld:testf08.f08: file format not recognized; treating as linker script,甚至在尝试编译之前就失败了。请使用.f90作为扩展名,并使用FFLAGS将-std=f2008(gfortran)添加进去,这样才能真正使用F2008标准,而不是依赖于扩展名来实现。 - casey
2
你每次从新标准中添加功能时都要重命名所有文件吗? - Vladimir F Героям слава
2个回答

2
如果您需要指定无法识别扩展名的Fortran文件,可以设置源文件的LANGUAGE属性,例如:

set LANGUAGE

set_source_files_properties(hello-world.f08 PROPERTIES LANGUAGE Fortran)

0
你可以使用

ifx /extfor:f08 /free main.f08

因为ifort现在已经被弃用,我使用了ifx。
但是使用/extfor:f08 /free编译选项是一种非标准的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接