У меня есть проект на Fortran, который я собрал в mex. Он содержит несколько файлов Fortran, которые должны быть связаны друг с другом, и несколько mex-библиотек. Используя Makefile, подобный приведенному ниже, я смог заставить его работать:
MEX=/opt/matlab/r2018a/bin/mex
FORTRAN = gfortran
FFLAGS = -c -fpic -fopenmp -Wall -O3 -fdefault-real-8 -fdefault-double-8
MEXLIBDIR = /opt/matlab/r2018a/sys/os/glnxa64
MEXLIB = -lgfortran -liomp5 -lirc -lsvml -limf
OBJS=\
file_a.o\
file_b.o\
all: file_a file_b mex
mex: mex_executable.F $(OBJS)
$(MEX) -v -O mex_exectuable.F $(OBJS) -L$(MEXLIBDIR) $(MEXLIB)
file_a: file_a.f
$(FORTRAN) $(FFLAGS) file_a.f
file_b: file_b.f
$(FORTRAN) $(FFLAGS) file_b.f
Поскольку у меня будет несколько таких проектов, я бы хотел поместить все в один файл CMake.
Пока у меня есть CMakeLists.txt
, который выглядит примерно так, внутри каталога сборки:
cmake_minimum_required(VERSION 2.8)
project(MEX)
enable_language(Fortran)
find_package(Matlab REQUIRED MAIN_PROGRAM MX_LIBRARY)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin/")
# Assuming gfortran
set(CMAKE_Fortran_FLAGS "-c -fpic -Wall -O3 -fopenmp -fdefault-real-8 -fdefault-double-8")
include_directories(
${Matlab_INCLUDE_DIRS}
)
# Add modules with MEX to be built
add_subdirectory("${PROJECT_SOURCE_DIR}/Project1")
А внутри каталога Project1 у меня есть еще один CMakeLists.txt
:
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
)
## MEX functions
matlab_add_mex(
NAME mex_executable
SRC mex_executable.F *.f
)
target_link_libraries(mex_executable lgfortran liomp5 lirc lsvml limf )
Когда я запускаю CMake, я получаю сообщение об ошибке:
Cannot find source file:
*.f
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
Как правильно указать CMake для компиляции файлов Fortran и связывания правильных библиотек mex?