我使用包管理器vcpkg
通过vcpkg install boost:x64-windows-static
安装(静态)Boost
库。
此外,我使用CMake
作为构建系统,并通过-DCMAKE_TOOLCHAIN_FILE
CMake
命令将C:\vcpkg\scripts\buildsystems\vcpkg.cmake
传递给CMake
。
在我的CMakeLists.txt
中,我强制使用静态Boost
库:
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost COMPONENTS filesystem iostreams REQUIRED)
if (Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
endif ()
# ...
target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})
但是,Visual Studio
仍然试图查找Boost
库的错误文件路径:
Error 'C:/vcpkg/installed/x64-windows/lib/boost_filesystem-vc140-mt.lib', needed by 'MyProject.exe', missing and no known rule to make it
如果我安装了动态Boost
库,它将构建得很好,因为这是Visual Studio
的外观。然而,我想在我的构建中使用静态库,以便所有DLL
都"合并"到最终的EXE
中。
我怎样才能做到这一点?
3条答案
按热度按时间sy5wg1nm1#
我也有同样的问题。
解决方法
在强制执行find_package之前。
将
cmake
与vcpkg
配合使用时,请在CmakeCache.txt
中查找_VCPKG_INSTALLED_DIR
变量5kgi1eie2#
默认情况下,vcpkg.cmake脚本似乎会自动检测由vcpkg安装的动态库。
您可以通过在调用cmake时设置一个变量来覆盖项目的此行为:
或者使用CMakePresets.json:
我还没有找到如何在每个库的基础上进行此操作。
更多详细信息here和here。
8xiog9wr3#
实际上,我发现正确工作的是以下CMake: