使用vcpkg安装pugixml时如何传递编译器标志?
使用vcpkg安装pugixml时传递编译标志的解决方案
当然可以在vcpkg安装包时传递编译标志,针对你的pugixml+wchar_t需求,有两种实用方法:
方法一:安装时直接传递编译参数
在执行vcpkg安装命令时,通过--cmake-args选项指定pugixml的编译标志,命令如下:
vcpkg install pugixml --cmake-args="-DPUGIXML_WCHAR_MODE=ON"
这样vcpkg会带着这个宏定义编译pugixml,生成支持wchar_t的库文件。
方法二:自定义triplet(适合重复使用场景)
如果需要多次安装带相同编译参数的包,自定义triplet更方便:
- 找到vcpkg的
triplets目录(或者创建一个自定义triplets文件夹),新建一个比如x64-windows-wchar.cmake文件,内容如下:
set(VCPKG_TARGET_ARCHITECTURE x64) set(VCPKG_CRT_LINKAGE dynamic) # 根据你的需求选dynamic或static set(VCPKG_LIBRARY_LINKAGE dynamic) set(VCPKG_CMAKE_SYSTEM_NAME Windows) # 全局添加wchar模式的编译宏 set(VCPKG_CXX_FLAGS "${VCPKG_CXX_FLAGS} -DPUGIXML_WCHAR_MODE") set(VCPKG_C_FLAGS "${VCPKG_C_FLAGS} -DPUGIXML_WCHAR_MODE")
- 安装时指定这个自定义triplet:
vcpkg install pugixml --triplet x64-windows-wchar
额外注意
无论用哪种方法,你的项目代码也必须定义DPUGIXML_WCHAR_MODE,否则依然会出现函数签名不匹配的链接错误。在你的CMakeLists.txt里添加:
# 针对目标添加宏定义(推荐) target_compile_definitions(你的项目目标名 PRIVATE PUGIXML_WCHAR_MODE) # 或者全局添加(不推荐,可能影响其他依赖) # add_definitions(-DPUGIXML_WCHAR_MODE)
之前出现LNK2001错误的核心原因就是:vcpkg默认编译的pugixml用的是char模式,而你的项目开启了wchar_t模式,导致两者的函数签名(比如字符串参数类型)不一致,链接时找不到对应符号。只要让vcpkg编译的库和你的项目使用完全一致的编译宏,就能解决问题。
内容的提问来源于stack exchange,提问作者André Lehto
相关产品推荐
相关产品推荐

