У меня есть проект 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, несмотря на настройку в CMakeList.txt в libtest.
Fortran_MODULE_DIRECTORY соблюдается только при вызове add_executable ()?И просто проигнорировал сборку библиотеки в одиночку?Или я что-то упускаю.
Спасибо за помощь.
РЕДАКТИРОВАТЬ: Это воспроизведет мою проблему.
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/ )
Если я соберу и установлю вышеуказанный код, я получу библиотеку libtt.a, установленную в каталоге Lib, однако мой main.mod останется в моем каталоге сборки и не будет встроен в модпапка.