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文件。选项包括
PROJECTFortran 项目的名称,如位于
<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 库有多种方法。替代方法包括:
使用
add_subdirectory()命令直接将子目录添加到构建中。使用
FetchContent或ExternalProject模块处理外部依赖项。