Using Lapack in Fortran with CMake Build

110 views Asked by At

I am having some trouble compiling my Fortran code with lapack using CMake - I am new to all of this. I have blas and lapack installed in /usr/lib/x86_64-linux-gnu/ and am using the following CMakeLists.txt file:

cmake_minimum_required(VERSION 3.27)
project(DVR Fortran)

enable_language(Fortran)


set(BLAS_DIR "/usr/lib/x86_64-linux-gnu/blas")
set(LAPACK_DIR "/usr/lib/x86_64-linux-gnu/lapack")
find_package(LAPACK REQUIRED)
if(LAPACK_FOUND AND BLAS_FOUND)
    set(LAPACKBLAS_LIBRARIES ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES})
    message("BLAS FOUND: " ${BLAS_LIBRARIES})
    message("LAPACK FOUND: " ${LAPACK_LIBRARIES})
endif()
include_directories(${LAPACK_INCLUDE_DIRS})
include_directories(${BLAS_INCLUDE_DIRS})


set(SOURCES
        types.f90
        io.f90
        grid_gen.f90
        potentials.f90
        dvr_solvers.f90
        main.f90
)

add_executable(dvr ${SOURCES})
target_compile_options(dvr PRIVATE -llapack)
target_link_libraries(dvr ${LAPACKBLAS_LIBRARIES})

which compiles fine (with f95) and prints that the blas and lapack libraries are found. Note I am using CLion as an IDE and am building my project within that. However, as soon as I add use lapack or use lapack95 to main.f90 - I get an error saying it can't find lapack.mod. I was previously using gfortran and when I set the compiler to gfortran in CMakelists.txt I do not get any errors however it does not print that blas and lapack are found as it should according to the if block in CMakelists.txt. I have been stuck with this for a while and am confused as to why whatever compiler I use with -llapack flag does not seem to generate the .mod files, how can I be sure they are generated and use the lapack functions in main.f90 or any of my other modules? Any help would be appreciated.

Thanks.

UPDATE:

output of build without use lapack in main.f90:

opt/clion-2023.3.2/bin/cmake/linux/x64/bin/cmake --build /home/usrkm/CLionProjects/DVR/cmake-build-debug --target dvr -j 18 -v
Change Dir: '/home/usrkm/CLionProjects/DVR/cmake-build-debug'

Run Build Command(s): /opt/clion-2023.3.2/bin/ninja/linux/x64/ninja -v -j 18 dvr
[0/1] /opt/clion-2023.3.2/bin/cmake/linux/x64/bin/cmake --regenerate-during-build -S/home/usrkm/CLionProjects/DVR -B/home/usrkm/CLionProjects/DVR/cmake-build-debug
BLAS FOUND: /usr/lib/x86_64-linux-gnu/libblas.so
LAPACK FOUND: /usr/lib/x86_64-linux-gnu/liblapack.so/usr/lib/x86_64-linux-gnu/libblas.so
-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: /home/usrkm/CLionProjects/DVR/cmake-build-debug
[1/14] gfortran -cpp   -g -fdiagnostics-color=always -llapack -E /home/usrkm/CLionProjects/DVR/grid_gen.f90 -o CMakeFiles/dvr.dir/grid_gen.f90-pp.f90 && /opt/clion-2023.3.2/bin/cmake/linux/x64/bin/cmake -E cmake_ninja_depends --tdi=CMakeFiles/dvr.dir/FortranDependInfo.json --lang=Fortran --src=CMakeFiles/dvr.dir/grid_gen.f90-pp.f90 --out=CMakeFiles/dvr.dir/grid_gen.f90-pp.f90 --dep=CMakeFiles/dvr.dir/grid_gen.f90-pp.f90.d --obj=CMakeFiles/dvr.dir/grid_gen.f90.o --ddi=CMakeFiles/dvr.dir/grid_gen.f90.o.ddi
[2/14] gfortran -cpp   -g -fdiagnostics-color=always -llapack -E /home/usrkm/CLionProjects/DVR/types.f90 -o CMakeFiles/dvr.dir/types.f90-pp.f90 && /opt/clion-2023.3.2/bin/cmake/linux/x64/bin/cmake -E cmake_ninja_depends --tdi=CMakeFiles/dvr.dir/FortranDependInfo.json --lang=Fortran --src=CMakeFiles/dvr.dir/types.f90-pp.f90 --out=CMakeFiles/dvr.dir/types.f90-pp.f90 --dep=CMakeFiles/dvr.dir/types.f90-pp.f90.d --obj=CMakeFiles/dvr.dir/types.f90.o --ddi=CMakeFiles/dvr.dir/types.f90.o.ddi
[3/14] gfortran -cpp   -g -fdiagnostics-color=always -llapack -E /home/usrkm/CLionProjects/DVR/io.f90 -o CMakeFiles/dvr.dir/io.f90-pp.f90 && /opt/clion-2023.3.2/bin/cmake/linux/x64/bin/cmake -E cmake_ninja_depends --tdi=CMakeFiles/dvr.dir/FortranDependInfo.json --lang=Fortran --src=CMakeFiles/dvr.dir/io.f90-pp.f90 --out=CMakeFiles/dvr.dir/io.f90-pp.f90 --dep=CMakeFiles/dvr.dir/io.f90-pp.f90.d --obj=CMakeFiles/dvr.dir/io.f90.o --ddi=CMakeFiles/dvr.dir/io.f90.o.ddi
[4/14] gfortran -cpp   -g -fdiagnostics-color=always -llapack -E /home/usrkm/CLionProjects/DVR/potentials.f90 -o CMakeFiles/dvr.dir/potentials.f90-pp.f90 && /opt/clion-2023.3.2/bin/cmake/linux/x64/bin/cmake -E cmake_ninja_depends --tdi=CMakeFiles/dvr.dir/FortranDependInfo.json --lang=Fortran --src=CMakeFiles/dvr.dir/potentials.f90-pp.f90 --out=CMakeFiles/dvr.dir/potentials.f90-pp.f90 --dep=CMakeFiles/dvr.dir/potentials.f90-pp.f90.d --obj=CMakeFiles/dvr.dir/potentials.f90.o --ddi=CMakeFiles/dvr.dir/potentials.f90.o.ddi
[5/14] gfortran -cpp   -g -fdiagnostics-color=always -llapack -E /home/usrkm/CLionProjects/DVR/dvr_solvers.f90 -o CMakeFiles/dvr.dir/dvr_solvers.f90-pp.f90 && /opt/clion-2023.3.2/bin/cmake/linux/x64/bin/cmake -E cmake_ninja_depends --tdi=CMakeFiles/dvr.dir/FortranDependInfo.json --lang=Fortran --src=CMakeFiles/dvr.dir/dvr_solvers.f90-pp.f90 --out=CMakeFiles/dvr.dir/dvr_solvers.f90-pp.f90 --dep=CMakeFiles/dvr.dir/dvr_solvers.f90-pp.f90.d --obj=CMakeFiles/dvr.dir/dvr_solvers.f90.o --ddi=CMakeFiles/dvr.dir/dvr_solvers.f90.o.ddi
[6/14] gfortran -cpp   -g -fdiagnostics-color=always -llapack -E /home/usrkm/CLionProjects/DVR/main.f90 -o CMakeFiles/dvr.dir/main.f90-pp.f90 && /opt/clion-2023.3.2/bin/cmake/linux/x64/bin/cmake -E cmake_ninja_depends --tdi=CMakeFiles/dvr.dir/FortranDependInfo.json --lang=Fortran --src=CMakeFiles/dvr.dir/main.f90-pp.f90 --out=CMakeFiles/dvr.dir/main.f90-pp.f90 --dep=CMakeFiles/dvr.dir/main.f90-pp.f90.d --obj=CMakeFiles/dvr.dir/main.f90.o --ddi=CMakeFiles/dvr.dir/main.f90.o.ddi
[7/14] /opt/clion-2023.3.2/bin/cmake/linux/x64/bin/cmake -E cmake_ninja_dyndep --tdi=CMakeFiles/dvr.dir/FortranDependInfo.json --lang=Fortran --dd=CMakeFiles/dvr.dir/Fortran.dd @CMakeFiles/dvr.dir/Fortran.dd.rsp
[8/14] gfortran -I/home/usrkm/CLionProjects/DVR -g -fdiagnostics-color=always -llapack -fpreprocessed -c CMakeFiles/dvr.dir/types.f90-pp.f90 -o CMakeFiles/dvr.dir/types.f90.o
[9/14] gfortran -I/home/usrkm/CLionProjects/DVR -g -fdiagnostics-color=always -llapack -fpreprocessed -c CMakeFiles/dvr.dir/grid_gen.f90-pp.f90 -o CMakeFiles/dvr.dir/grid_gen.f90.o
[10/14] gfortran -I/home/usrkm/CLionProjects/DVR -g -fdiagnostics-color=always -llapack -fpreprocessed -c CMakeFiles/dvr.dir/io.f90-pp.f90 -o CMakeFiles/dvr.dir/io.f90.o
[11/14] gfortran -I/home/usrkm/CLionProjects/DVR -g -fdiagnostics-color=always -llapack -fpreprocessed -c CMakeFiles/dvr.dir/potentials.f90-pp.f90 -o CMakeFiles/dvr.dir/potentials.f90.o
[12/14] gfortran -I/home/usrkm/CLionProjects/DVR -g -fdiagnostics-color=always -llapack -fpreprocessed -c CMakeFiles/dvr.dir/dvr_solvers.f90-pp.f90 -o CMakeFiles/dvr.dir/dvr_solvers.f90.o
[13/14] gfortran -I/home/usrkm/CLionProjects/DVR -g -fdiagnostics-color=always -llapack -fpreprocessed -c CMakeFiles/dvr.dir/main.f90-pp.f90 -o CMakeFiles/dvr.dir/main.f90.o
[14/14] : && gfortran  -g CMakeFiles/dvr.dir/types.f90.o CMakeFiles/dvr.dir/io.f90.o CMakeFiles/dvr.dir/grid_gen.f90.o CMakeFiles/dvr.dir/potentials.f90.o CMakeFiles/dvr.dir/dvr_solvers.f90.o CMakeFiles/dvr.dir/main.f90.o -o dvr  /usr/lib/x86_64-linux-gnu/libblas.so  /usr/lib/x86_64-linux-gnu/liblapack.so  /usr/lib/x86_64-linux-gnu/libblas.so  /usr/lib/x86_64-linux-gnu/liblapack.so && :


Build finished

Output upon incuding use lapack in main program:

/opt/clion-2023.3.2/bin/cmake/linux/x64/bin/cmake --build /home/usrkm/CLionProjects/DVR/cmake-build-debug --target dvr -j 18 -v
Change Dir: '/home/usrkm/CLionProjects/DVR/cmake-build-debug'

Run Build Command(s): /opt/clion-2023.3.2/bin/ninja/linux/x64/ninja -v -j 18 dvr
[1/2] gfortran -I/home/usrkm/CLionProjects/DVR -g -fdiagnostics-color=always -llapack -fpreprocessed -c CMakeFiles/dvr.dir/main.f90-pp.f90 -o CMakeFiles/dvr.dir/main.f90.o
FAILED: CMakeFiles/dvr.dir/main.f90.o
gfortran -I/home/usrkm/CLionProjects/DVR -g -fdiagnostics-color=always -llapack -fpreprocessed -c CMakeFiles/dvr.dir/main.f90-pp.f90 -o CMakeFiles/dvr.dir/main.f90.o
/home/usrkm/CLionProjects/DVR/main.f90:7:6:

    7 |         use lapack
      |             1
Fatal Error: Cannot open module file ‘lapack.mod’ for reading at (1): No such file or directory
compilation terminated.
ninja: build stopped: subcommand failed.
0

There are 0 answers