如何找出cmake从哪里获取“C:/building/”前缀?该目录从未存在过。我正在尝试在 exe 中静态链接 mingw 库。
[build] Starting build
[proc] Executing command: F:\msys64\mingw64\bin\cmake.exe --build c:/Users/kerne/Desktop/Dropper/build --config Debug --target all -- -j 10
[build] mingw32-make.exe[2]: *** No rule to make target 'C:/building/msys64/mingw64/lib/libexpat.dll.a', needed by 'dropper.exe'. Stop.
[build] mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:75: CMakeFiles/dropper.dir/all] Error 2
[build] mingw32-make.exe: *** [Makefile:129: all] Error 2
[build] Build finished with exit code 2
CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
project(dropper)
include(GNUInstallDirs)
get_filename_component(mingw64_share ${CMAKE_ROOT} DIRECTORY)
get_filename_component(mingw64 ${mingw64_share} DIRECTORY)
set(mingw64_include ${mingw64}/include)
set(mingw64_lib ${mingw64}/lib)
set(mingw64_bin ${mingw64}/bin)
set(CMAKE_INSTALL_PREFIX ${mingw64} CACHE PATH "Cmake prefix" FORCE)
message(STATUS "!-- ${CMAKE_INSTALL_FULL_LIBDIR}")
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall")
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static-libexpat -static")
# Create executable
file(GLOB
CPP_SRC "src/*.cpp")
include_directories("${PROJECT_SOURCE_DIR}/include")
link_directories("${PROJECT_SOURCE_DIR}/include")
include_directories(${CMAKE_INSTALL_FULL_LIBDIR})
link_directories(${CMAKE_INSTALL_FULL_LIBDIR})
add_executable(${PROJECT_NAME} ${CPP_SRC})
CMake 与 MSYS2 一起安装。所有 GnuInstallDirs 环境变量都正确并指向 mingw64/ 目录树(即 mingw64/bin、mingw64/include 等)
更新:
我发现了一个类似的问题。这都是关于 libxml2-2.9.4 包的。但是 msys2 使用版本 2.9.9-4 和 mingw64:mingw-w64-x86_64-libxml2 2.9.9-2。我什至尝试将 libexpat.dll.a 移动到 C:/building/msys64/mingw64/lib/ 但得到相同的输出:
mingw32-make.exe[2]: *** No rule to make target 'C:/building/msys64/mingw64/lib/libexpat.dll.a', needed by ...
问题还是没有解决!
更新2:
事实证明,这个问题普遍存在于所有 MSYS2 库中。我不太明白如何,但是,显然,他们收集了带有硬编码目录的库.. 我将尝试通过将 msys2 移动到地址来解决它:c:\building
通过将 MSYS2 移动到
C:\building. 也就是说,现在整个基础架构看起来像这样:C:\building\msys64\mingw64\bin. 希望在未来,MSYS2 开发人员不会为构建的库硬编码路径。