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
,它将搜索 MinGWgfortran
编译器。在这种情况下,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 库的方法。其他方法包括:
add_subdirectory()
命令直接将子目录添加到构建中。在使用外部依赖项时,使用
FetchContent
或ExternalProject
模块。