首页 > 解决方案 > 通过`add_subdirectory`添加的库面临“编译时没有规则来制作目标..”错误

问题描述

我正在尝试清理遗留的 C-FORTRAN FLOSS 代码,但我正面临一个相当奇怪的错误。通过顶部文件add_subdirectory中的添加了一些库/文件夹。在文件夹中运行命令成功生成s(除了一些可能是误报的小警告)。但是,在编译时出现一个奇怪的错误:CMakeLists.txtcmake ..buildMakeFilemake

扫描目标 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.co
mingw32-make[2]: *** 没有规则来制作目标 '/mingw64/include/cblas.h','umfpack/src/umfpack/CMakeFiles/umfpack.dir/umfpack_tictoc.co' 需要。停止。
mingw32-make[2]: 离开目录'/path/to/elmerfem/build'
mingw32-make[1]: *** [CMakeFiles/Makefile2:265: umfpack/src/umfpack/CMakeFiles/umfpack.dir/all] 错误 2
mingw32-make [1]:离开目录'/path/to/elmerfem/build'
mingw32-make: *** [Makefile:163: all] 错误 2

我不知道如何调试。在这种情况下,/mingw64/include/cblas.h存在,并且先前的 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

显示BLASLAPACK已成功找到。

如果您能帮助我了解问题所在以及如何解决,我将不胜感激。提前感谢您的支持。

环境是:

PS1。我刚刚在 macOS 上测试了代码,它编译没有问题。所以这似乎是一个 Windows/MSYS2 特定的问题。

PS2。有人告诉我我应该安装suitesparse库,所以我做了

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

它没有帮助。

PS3。同样在此 Tweet之后,我应该澄清我正在使用 MSYS2 的 CMake 和 GNU Make 包,如此此处所述。

标签: cmakecompiler-errorsmsys2

解决方案


运行mingw64.exe(不是msys2.exe)。

确保安装以下软件包: mingw-w64-x86_64-cmake mingw-w64-x86_64-make mingw-w64-x86_64-suitesparse 和 C/C++ 、Fortran 编译器。

注意:所有安装的包都必须在 mingw64 目录下。

更改WITH_MPICMakeLists.txt 中的值:

SET(WITH_MPI FALSE ...

使用以下命令查找 cmake 和 make 的路径: $ 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

在 elmer 存储库中创建构建目录,然后:

my_cmake -G "MinGW Makefiles" ..

my_make

推荐阅读