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文件。选项包括
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阻止外部项目的安装。
注意
为了与将来支持在
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模块。