我正在尝试清理legacy C-FORTRAN FLOSS code,并且遇到了一个非常奇怪的错误。通过add_subdirectory
中的top CMakeLists.txt
file添加了一些库/文件夹。在CMakeLists.txt
文件夹中运行cmake ..
命令会成功生成build
(除了MakeFile
可能为假阳性)。但是,当使用some minor warnings进行编译时,出现了一个严重的错误:
扫描目标umfpack的依赖项mingw32-make [2]:离开目录'/ path / to / elmerfem / build'mingw32-make [2]:输入目录'/ path / to / elmerfem / build'[46%]构建C对象umfpack / src / umfpack / CMakeFiles / umfpack.dir / umfpack_timer.c.omingw32-make [2]:***没有规则来建立目标'/mingw64/include/cblas.h',这是'umfpack / src / umfpack / CMakeFiles / umfpack.dir / umfpack_tictoc.c.o'所需要的。停止。mingw32-make [2]:离开目录'/ path / to / elmerfem / build'mingw32-make [1]:*** [CMakeFiles / Makefile2:265:umfpack / src / umfpack / CMakeFiles / umfpack.dir / all]错误2mingw32-make [1]:离开目录'/ path / to / elmerfem / build'mingw32-make:*** [Makefile:163:全部]错误2
我不知道如何调试。在这种情况下,make
存在,并且先前的CMake输出:
-寻找Fortran sgemm-寻找Fortran sgemm-找到-找到了BLAS:/mingw64/lib/libopenblas.dll.a-寻找Fortran Cheev-寻找Fortran Cheev-找到-找到具有LAPACK API的库。--------------------------------------------------BLAS库:/mingw64/lib/libopenblas.dll.a-LAPACK库:/mingw64/lib/libopenblas.dll.a
显示已成功找到/mingw64/include/cblas.h
和BLAS
。
如果您能帮助我知道问题所在以及如何解决,我将不胜感激。感谢您的提前支持。
环境是:
P.S.1。我刚刚在macOS上测试了代码,并且编译时没有问题。因此,这似乎是Windows / MSYS2特定的问题。
P.S.2。有人告诉我应该安装LAPACK
库,所以我这样做了
suitesparse
没有帮助。
P.S.3。同样在 pacman -S mingw64/mingw-w64-x86_64-suitesparse
之后,我应该阐明我正在使用MSYS2的CMake和GNU Make软件包,如this Tweet和here所述。
运行here(不是mingw64.exe
)。
请确保安装以下软件包:msys2.exe
mingw-w64-x86_64-cmake
mingw-w64-x86_64-make
和C / C ++,Fortran编译器。
注意:所有已安装的软件包都必须在mingw64目录中。
更改CMakeLists.txt中的mingw-w64-x86_64-suitesparse
值:
WITH_MPI
查找cmake的路径并使用以下命令进行制作:SET(WITH_MPI FALSE ...
和$ where cmake.exe
为简单起见,请使用$ where mingw32-make.exe
命令:
alias
在Elmer存储库中创建build目录,然后:
alias my_cmake=/d/msys64/mingw64/bin/cmake.exe
alias my_make=/d/msys64/mingw64/bin/mingw32-make.exe