Привет У меня есть проект на Fortran со следующим порядком каталогов
CMakeLists.txt
src/module_1.f90 (Fortran Modules)
src/module_2.f90
src/... (more files)
module_1.f90 зависит от module_2.f90.
Упрощенный CMakeLists.txt:
project(MyProject LANGUAGES Fortran)
file(GLOB SOURCES src/*.f90)
add_executable(MyExec SOURCES)
Я получаю ошибку зависимости:
Fatal Error: Can't open module file ‘module_2.mod’ :for reading at (1): The file or directory doesn't exist.
Я пытался:
include_directories(src)
без положительных результатов.
, если вы выполняете поиск в каталоге сборки:
find . -name "module_2*"
ничего не выходит, поэтому module_2 не скомпилирован до module_1.Почему это происходит?
Отредактировано:
Я нашел проблему в конце.В module_1
у меня была прагма (которая изначально не поддерживается Fortran), которая была похожа на:
#ifdef VAR
module_1_function
#endif
, и в моем CMakeLists.txt я объявил:
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -DVAR=2")
Когда CMakeсоздавал дерево зависимостей, оно не учитывало эту переменную.Чтобы сделать это правильно, я должен был сделать последнее следующим образом:
add_definitions(-DVAR=2)
Это решило проблему.