cmake - 通过`add_subdirectory`添加的库面临“编译时没有规则来制作目标..”错误
问题描述
我正在尝试清理遗留的 C-FORTRAN FLOSS 代码,但我正面临一个相当奇怪的错误。通过顶部文件add_subdirectory
中的添加了一些库/文件夹。在文件夹中运行命令成功生成s(除了一些可能是误报的小警告)。但是,在编译时出现一个奇怪的错误:CMakeLists.txt
cmake ..
build
MakeFile
make
扫描目标 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
显示BLAS
并LAPACK
已成功找到。
如果您能帮助我了解问题所在以及如何解决,我将不胜感激。提前感谢您的支持。
环境是:
- MSYS2:MSYS_NT-10.0-18363
- 视窗版本 1909
- cmake 版本 3.15.5
- GNU Make 4.3
- gcc.exe(Rev1,由 MSYS2 项目构建)9.3.0
PS1。我刚刚在 macOS 上测试了代码,它编译没有问题。所以这似乎是一个 Windows/MSYS2 特定的问题。
PS2。有人告诉我我应该安装suitesparse
库,所以我做了
pacman -S mingw64/mingw-w64-x86_64-suitesparse
它没有帮助。
PS3。同样在此 Tweet之后,我应该澄清我正在使用 MSYS2 的 CMake 和 GNU Make 包,如此处和此处所述。
解决方案
运行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 和 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
推荐阅读
- python - 如何使用 wsadmin 创建脚本以在 websphere 应用程序服务器中导入和删除个人证书?
- kotlin - Project Reactor flatMap 的顺序是顺序的吗?
- reactjs - React / Redux TypeError:无法读取组件中未定义的属性“请求”
- macos - MacOs Catalina 和 Kerberos 配置
- javascript - 如何解决 Uncaught ReferenceError:utag 未定义?
- url - 如何重定向域
- cucumber - 在黄瓜表中生成动态数据
- c# - 与.net核心的MongoDB超时连接
- php - 在 dockerized laravel 中执行 powershell 命令时需要帮助
- python-3.x - 安装 MOBSF 时出现错误包错误