c++ - CMake:使用项目安装 boost 组件库的正确方法
问题描述
我正在针对 Boost 共享库构建和链接一个项目。现在:如何将这些库放入目标应用程序的安装目录?我需要这个,因为应用程序将安装在没有正确 Boost 版本的容器内。
我在多种变体中尝试的是:
install(PROGRAMS ${Boost_LIBRARIES} DESTINATION install/lib)
但无论是这个还是我能想到的任何其他变体都没有给我实际的共享库文件名。
解决方案
这是对这个问题的答案的简要总结。如需完整成绩单,请参阅修订历史
接受的答案
问题中指示的代码行应该可以工作,但这取决于 CMake 如何定位 Boost 框架。
只有 Boost 框架的特定组件具有可安装的运行时库。如果您需要其中任何一个,您必须在 CMakeLists.txt 文件的 FindBoost 命令中列出这些组件。
我已经使用下面的最小 CMakeLists.txt 在带有 CMake 3.10 和 Boost 1.65 的 Ubuntu 18.04 上对此进行了测试:
cmake_minimum_required(VERSION 3.10)
find_package(
Boost 1.65 REQUIRED
COMPONENTS filesystem system
)
install(PROGRAMS ${Boost_LIBRARIES} DESTINATION ~/install/lib)
遵循...的标准约定:
mkdir build
cd build
ccmake ..
cmake .
make
make install
...我成功地看到 libboost_filesystem.so 和 libboost_system.so 安装在用户主文件夹下的指定位置。
推荐阅读
- reactjs - Redux 将 dispatch 连接到 props
- python-3.x - Y = churn.iloc[:, 18].values
- c# - xunit.net 测试发现并运行,但“调用执行程序 'executor://xunit/VsTestRunner2/uap' 时发生异常”
- java - Hashmap 非空元组 vavr
- tsql - 连接两个表时需要多个条件的真假答案
- delphi - 为什么CopyRect在delphi 10.3中翻转了第二张图片?
- python - 如何在 Cython 中返回 C++ 包装的对象
- java - 如何为算术计算java解析器编写递归while循环
- c# - MSTest:测试分组
- x509certificate - 如何在 Corda 中手动生成网络参数