библиотеки добавлены через `add_subdirectory` face" Ошибка при создании компиляции .. - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь очистить устаревший C -FORTRAN FLOSS код , и я сталкиваюсь с довольно странной ошибкой. В top CMakeLists.txt file добавлено несколько библиотек / папок, добавленных через add_subdirectory. Выполнение команды cmake .. в папке build успешно генерирует MakeFile s (за исключением некоторых незначительных предупреждений , которые могут быть ложноположительными). Однако при компиляции с make я получаю странную ошибку:

Scanning dependencies of target umfpack
mingw32-make[2]: Leaving directory '/path/to/elmerfem/build'
mingw32-make[2]: Entering directory '/path/to/elmerfem/build'
[ 46%] Building C object umfpack/src/umfpack/CMakeFiles/umfpack.dir/umfpack_timer.c.o
mingw32-make[2]: *** No rule to make target '/mingw64/include/cblas.h', needed by 'umfpack/src/umfpack/CMakeFiles/umfpack.dir/umfpack_tictoc.c.o'.  Stop.
mingw32-make[2]: Leaving directory '/path/to/elmerfem/build'
mingw32-make[1]: *** [CMakeFiles/Makefile2:265: umfpack/src/umfpack/CMakeFiles/umfpack.dir/all] Error 2
mingw32-make[1]: Leaving directory '/path/to/elmerfem/build'
mingw32-make: *** [Makefile:163: all] Error 2

, которую я не знаю, как отлаживать. В этом случае /mingw64/include/cblas.h существует, и предыдущие выходные данные CMake:

-- Looking for Fortran sgemm
-- Looking for Fortran sgemm - found
-- Found BLAS: /mingw64/lib/libopenblas.dll.a
-- Looking for Fortran cheev
-- Looking for Fortran cheev - found
-- A library with LAPACK API found.
-- ------------------------------------------------
--   BLAS library:   /mingw64/lib/libopenblas.dll.a
--   LAPACK library: /mingw64/lib/libopenblas.dll.a

Показать, что BLAS и LAPACK были успешно найдены.

Буду признателен, если вы поможете мне понять, в чем проблема и как я могу ее исправить. Спасибо за вашу поддержку заранее.

Среда:

  • MSYS2: MSYS_NT-10.0-18363
  • Windows Версия 1909
  • cmake версия 3.15.5
  • GNU Make 4.3
  • g cc .exe (Rev1, построена в проекте MSYS2) 9.3.0

PS1. Я только что протестировал код на macOS, и он без проблем скомпилирован. Так что, похоже, это проблема Windows / MSYS2, специфическая c.

PS2. Мне сказали, что я должен установить библиотеку suitesparse, поэтому я сделал

 pacman -S mingw64/mingw-w64-x86_64-suitesparse

это не помогло.

PS3. Также следуя этому твиту , я должен уточнить, что я использую пакеты MSYS2 для CMake и GNU Make, как объяснено здесь и здесь .

1 Ответ

1 голос
/ 12 апреля 2020

Запуск mingw64.exe (не msys2.exe).

Убедитесь, что установлены следующие пакеты: mingw-w64-x86_64-cmake mingw-w64-x86_64-make mingw-w64-x86_64-suitesparse и C / C ++, компиляторы Fortran.

Обратите внимание: все установленные пакеты должны находиться в каталоге mingw64.

Изменить значение WITH_MPI в CMakeLists.txt:

SET(WITH_MPI FALSE ...

Найти пути cmake и создать с помощью этой команды: $ where cmake.exe и $ where mingw32-make.exe

для простоты используйте команду alias:

alias my_cmake=/d/msys64/mingw64/bin/cmake.exe
alias my_make=/d/msys64/mingw64/bin/mingw32-make.exe

Создайте build каталог в репозитории elmer и затем:

my_cmake -G "MinGW Makefiles" ..

my_make
...