CMakeAddFortranSubdirectory

此模块提供了一个命令,用于在子目录中添加 Fortran 项目。

在 CMake 项目中加载此模块,使用

include(CMakeAddFortranSubdirectory)

命令

此模块提供以下命令

cmake_add_fortran_subdirectory

将位于子目录中的纯 Fortran 子项目添加到当前项目中

cmake_add_fortran_subdirectory(
  <subdir>
  PROJECT <project-name>
  ARCHIVE_DIR <dir>
  RUNTIME_DIR <dir>
  LIBRARIES <libs>...
  LINK_LIBRARIES
    [LINK_LIBS <lib> <deps>...]...
  [CMAKE_COMMAND_LINE <flags>...]
  NO_EXTERNAL_INSTALL
)

此命令会检查当前编译器是否支持 Fortran,或尝试查找 Fortran 编译器。如果找到兼容的 Fortran 编译器,则将位于 <subdir> 的 Fortran 项目添加为当前项目的子目录。

如果未找到 Fortran 编译器且编译器是 MSVC,则会搜索 MinGW 的 gfortran 编译器。在这种情况下,Fortran 项目将使用 MinGW 工具作为外部项目进行构建,并创建 Fortran 相关的导入目标。此设置仅在 Fortran 代码构建为共享 DLL 库时有效,因此外部项目中启用了 BUILD_SHARED_LIBS 变量。此外,将 CMAKE_GNUtoMS 变量设置为 ON,以确保创建与 Microsoft 兼容的 .lib 文件。

选项包括

PROJECT

Fortran 项目的名称,如位于 <subdir> 的顶级 CMakeLists.txt 文件中定义的那样。

ARCHIVE_DIR

项目将 .lib 存档文件放置的目录。相对路径将解释为相对于 CMAKE_CURRENT_BINARY_DIR

RUNTIME_DIR

项目将 .dll 运行时文件放置的目录。相对路径将解释为相对于 CMAKE_CURRENT_BINARY_DIR

LIBRARIES

要创建或导入到当前项目中的库目标的名称。

LINK_LIBRARIES

LIBRARIES 指定链接接口库。此选项期望一个 LINK_LIBS <lib> <deps>... 项目列表,其中:

  • LINK_LIBS 标记新对的开始

  • <lib> 是一个库目标。

  • <deps>... 表示 <lib> 所需的一个或多个依赖项。

CMAKE_COMMAND_LINE

配置 Fortran 子项目时传递给 cmake(1) 命令的其他命令行标志。

NO_EXTERNAL_INSTALL

阻止安装外部项目。

注意

NO_EXTERNAL_INSTALL 选项是为了与未来支持在 make install 期间安装外部项目二进制文件的版本向前兼容而必需的。

示例

可以通过包含此模块并调用 cmake_add_fortran_subdirectory() 命令来将 Fortran 子目录添加到项目中。在下面的示例中,Fortran 项目提供了 hello 库及其依赖的 world 库。

include(CMakeAddFortranSubdirectory)

cmake_add_fortran_subdirectory(
  fortran-subdir
  PROJECT FortranHelloWorld
  ARCHIVE_DIR lib
  RUNTIME_DIR bin
  LIBRARIES hello world
  LINK_LIBRARIES
    LINK_LIBS hello world # hello library depends on the world library
  NO_EXTERNAL_INSTALL
)

# The Fortran target can be then linked to the main project target.
add_executable(main main.c)
target_link_libraries(main PRIVATE hello)

另请参阅

集成 Fortran 库有多种方法。替代方法包括: