pugixml CMake 项目不是静态链接

问题描述

我是 CMake 的新手,所以请原谅这个问题是多么基本。我在 Windows 上使用 Visual Studio,但由于我希望我的项目是跨平台的,因此我已将该项目设置为 CMake 项目。

我做了以下事情

  • 使用 cmake-gui 并将其指向 pugixml。
  • 只勾选了“STATIC_CRT”选项(即我没有勾选“BUILD_SHARED_LIBS”)
  • 将“CMAKE_INSTALL_PREFIX”调整到我希望所有静态库都可以放置的目录。
  • 生成项目。
  • 在 Visual Studio 中打开项目。
  • 已成功构建并安装项目。
  • 确认 .lib 文件已在安装位置构建(并且未按预期构建 DLL)以及包含文件和 CMake 文件

我的测试项目 CMakeLists.txt 也是如此,并且构建成功。

#
cmake_minimum_required (VERSION 3.10)
project(test CXX)

set(pugixml_DIR "C:/Projects/pugixml/lib/cmake/pugixml")
find_package(pugixml required)

# Add source to this project's executable.
add_executable (test "src/test.cpp" "src/test.h")

# Link
target_link_libraries(test PRIVATE pugixml::pugixml)

我的 test.cpp 是这样

#include "pugixml.hpp"

#include "test.h"

using namespace std;

int main()
{
  pugi::xml_document doc;
  pugi::xml_parse_result result = doc.load_file("config.xml");

  return 0;
}

项目构建成功,但是当我运行它时,出现错误 “由于未找到 pugixml.dll,代码执行无法继续”。

我注意到在 pugixml 的 cmake 文件中提到了“pugixml::static”。

pugixml-targets.cmake;第 62 行: add_library(pugixml::static STATIC IMPORTED)

不过,我试过了

  • pugixml::pugixml
  • pugixml::static
  • pugixml

使用 target_link_libraries 无效。

非常感谢您理解为什么该项目似乎是使用 DLL/共享库配置构建的。

编辑:构建命令在这里,可以看出,它似乎正确链接到 .lib 文件

[1/2] C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1428~1.293\bin\Hostx64\x64\cl.exe  /nologo /TP  -IC:\Projects\pugixml\include /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /FoCMakeFiles\test.dir\test.cpp.obj /FdCMakeFiles\test.dir\ /FS -c ..\..\..\test.cpp

[2/2] cmd.exe /C "cd . && "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\test.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100183~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100183~1.0\x64\mt.exe --manifests  -- C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1428~1.293\bin\Hostx64\x64\link.exe /nologo CMakeFiles\test.dir\test.cpp.obj  /out:test.exe /implib:test.lib /pdb:test.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console  C:\Projects\pugixml\lib\pugixml.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."

编辑:另外,我知道有各种 IDE 的特定项目文件,但我希望以最通用的方式使其工作,以便(在某些时候)在其他平台上构建需要最少的调整 - 因此使用 CMake。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)