我正在开发一个基于GLib和OpenBLAS的C语言程序,我希望它能在Windows和linux平台上运行,所以我选择了CMake来配置这个项目。我希望它能在Windows和linux平台上运行,所以我选择了CMake来配置这个项目。这是我的CMakeLists.txt。
# ...
find_package(PkgConfig REQUIRED)
pkg_check_modules(GLib REQUIRED glib-2.0)
message(STATUS "GLib Found:")
message(STATUS " GLib include directories: ${GLib_INCLUDE_DIRS}")
message(STATUS " GLib library directories: ${GLib_LIBRARY_DIRS}")
message(STATUS " GLib libraries: ${GLib_LIBRARIES}")
pkg_check_modules(BLAS REQUIRED openblas)
message(STATUS "OpenBLAS Found:")
message(STATUS " BLAS include directories: ${BLAS_INCLUDE_DIRS}")
message(STATUS " BLAS library directories: ${BLAS_LIBRARY_DIRS}")
message(STATUS " BLAS libraries: ${BLAS_LIBRARIES}")
#...
在MSYS2MinGW64上运行时,cmake给出:
-- GLib Found:
-- GLib include directories: X:/path/to/msys64/mingw64/include/glib-2.0;X:/path/to/msys64/mingw64/lib/glib-2.0/include;X:/path/to/msys64/mingw64/include
-- GLib library directories: X:/path/to/msys64/mingw64/lib
-- GLib libraries: glib-2.0;intl
-- OpenBLAS Found:
-- BLAS include directories: /mingw64/include/OpenBLAS
-- BLAS library directories:
-- BLAS libraries: openblas
似乎pkg-config在openblas上使用了*nix路径,这导致了包含失败。
添加 X:/path/to/msys64
作为前缀应该是可以的,但是msys可能安装在不同的地方,我不知道如何在cmake中找到msys的路径。但是msys可能安装在不同的地方,我不知道如何在cmake中找到msys的路径。
先谢谢你的帮助。
P.S. FindBLAS给出了同样的输出。
如果你在msys2中安装了Openblas和Glib,那么你可以比较一下pkg-config文件openblas.pc和glib-2.0.pc。现在你会发现它们之间的区别。换句话说,请在 openblas.pc 中加入前缀=mingw64。