c++ - CMake 条件库链接取决于平台
问题描述
我正在使用 CMake 将 Boost 链接到我的应用程序中:
我在我的以下代码中有适用于 Linux 的代码CMakeLists.txt
:
TARGET_LINK_LIBRARIES(app -lboost_system -lboost_thread -lcrypt)
但是在 OpenBSD 上-lboost_thread
是-lboost_thread-mt
相反的,并且-lcrypt
不是必需的。有没有办法编写 CMakeLists.txt 以根据存在的库来处理这两种情况?
解决方案
处理这种特定于平台的差异的需要是为什么应该使用 find 模块的原因。在这种情况下特别是 FindBoost 。执行后find_package
,您应该能够通过其规范目标名称拉入线程库Boost::thread
。
任何所需的 PUBLIC 库或标头都将成为规范目标链接接口的一部分,因此将自动添加,无需您进一步努力。您需要做的就是将规范目标添加为链接依赖项
target_link_libraries(app Boost::thread)
推荐阅读
- ios - 同时播放2个音频objective-c
- python - 使用 RE 查找所有模式
- php - move_uploaded_file() 不做这项工作
- c# - C#读取并解析目录目录中的所有xml文件并写入signle csv文件
- r - 如何在 ggplot2 中包含 IF 语句以忽略 NA 案例
- sql - CASE WHEN EXISTS 不显示值我知道应该是假的
- java - 将对象添加到 json 文件中的对象的 JsonArray
- python - 如何使用 python unittest 在模拟对象中模拟列表?
- python - Odoo - 计算字段导入
- angular - “Angulartics2GoogleAnalytics”类型上不存在属性“startTracking”