问题描述
我是 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 (将#修改为@)