CMakeAddFortranSubdirectory

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

在 CMake 项目中通过以下方式加载它:

include(CMakeAddFortranSubdirectory)

命令

此模块提供以下命令

cmake_add_fortran_subdirectory

将子目录中的 Fortran-only 子项目添加到当前项目

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

阻止外部项目的安装。

注意

为了与将来支持在 make install 期间安装外部项目二进制文件的版本向前兼容,需要 NO_EXTERNAL_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 库的方法。其他方法包括: