【发布时间】:2018-10-09 02:15:28
【问题描述】:
我有一个 CMake 3.5.2 项目,它创建了一个库:libtest.a,然后由可执行文件链接到该库。
源代码为Fortran,libtest.a生成模块文件:“main.mod”
可执行文件还需要包含此 main.mod 文件,因此为了使 main.mod 可访问,在构建项目时我将变量 CMAKE_Fortran_MODULE_DIRECTORY 设置为已知位置,并将其添加到相关的包含路径中。
这在构建整个项目时非常有用,main.mod 构建在已知位置,它可以用于任何代码需要它。然而,我的用法使得只需要自己构建 libtest.a,而有时将可执行文件留给下游用户构建。
我遇到的问题是,当我进入 libtest 源并将其视为自己的 CMake 项目时,该库将构建和安装,但 main.mod 文件始终留在 BINARY_DIR 中并且不是内置的CMAKE_Fortran_MODULE_DIRECTORY,尽管在 libtest 中的 CMakeList.txt 中设置。
仅在调用 add_executable() 时才使用 Fortran_MODULE_DIRECTORY 吗?并且仅仅因为库构建而被忽略?还是我错过了什么。
感谢您的帮助。
编辑:这将重现我的问题。
test_mod.f90:
module main
implicit none
real, parameter :: pi=3.2
end module main
tt.f90:
program test
use main
implicit none
real :: a, area
a =10
area = a * 100
end program test
CMakeList.txt:
CMAKE_minimum_required( VERSION 3.5 )
enable_language( Fortran )
project( tt )
file( GLOB test_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.f90 )
add_library( tt STATIC ${test_SOURCES} )
set( CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Mod )
install( TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/Lib/ )
如果我构建并安装上述代码,我将在 Lib 目录中安装一个 libtt.a 库,但是我的 main.mod 将保留在我的构建目录中,而不是在 Mod 文件夹中构建。
【问题讨论】: