【发布时间】:2021-10-04 14:09:27
【问题描述】:
我正在现代化我们的 CMake 构建系统并切换到所有依赖项的静态编译,以便我可以将应用程序部署为单个二进制文件。其中一个依赖项是静态编译的 LibXml2(Environment MSVC 2019 x64 Native):
cscript configure.js iconv=no compiler=msvc cruntime=/MT debug=yes static=yes prefix=libxml
nmake Makefile.msvc libxml install
这会生成 DLL win32\libxml\bin\libxml2.dll 和 LIB 文件 win32\libxml\lib\libxml2.lib和 win32\libxml\lib\libxml2_a.lib。
我的 CMake 文件如下所示:
find_package(LibXml2 REQUIRED)
add_executable(testapp WIN32)
target_sources(testapp
PRIVATE
Main.cpp
)
target_include_directories(testapp PUBLIC ${LIBXML_LIBRARIES})
target_link_libraries(testapp PRIVATE LibXml2::LibXml2)
问题:看起来查找模块FindLibXml2 选择了可重定位的共享 DLL,而不是静态 LIB 存档。因此,应用程序与动态库链接。
问题:如何使用查找模块脚本,但链接到静态版本的 LibXml2?这甚至可能还是我必须编写自己的查找脚本?
【问题讨论】:
-
尝试在命令行中将
LIBXML2_LIBRARY设置为X:/path/to/win32/libxml/lib/libxml2_a.lib
标签: c++ cmake static-libraries static-linking libxml2