c++ - Cmake add_compile_definitions 但适用于所有目标
问题描述
有没有办法在 cmake 中为创建的所有目标创建定义。到目前为止,当我
add_compile_definitions(MYDEFINITION)
在我的根 CmakeLists.txt 中,它似乎只为在该文件中创建的目标创建那些定义。但我想为子目录中创建的所有目标创建定义。做这个的最好方式是什么?
解决方案
我为所有目标设置属性的常用解决方案是简单地添加一个common
目标,该目标具有我想要添加到所有目标的接口属性。
add_library(common INTERFACE)
target_compile_definition(common INTERFACE MYDEFINITION)
巧妙的是,您还可以放置其他内容,例如警告设置:
target_compile_options(common INTERFACE
$<$<CXX_COMPILER_ID:MSVC>:/Wall>
$<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra>
)
在 common 目标中设置好常用的东西后,可以在需要的地方使用:
add_library(mylib ...)
add_executable(myexe ...)
target_link_libraries(mylib PRIVATE common)
target_link_libraries(myexe PRIVATE common)
推荐阅读
- c# - 无法正确循环发送短信,错误地向一个人发送多条短信
- c - 警告:从不兼容的指针类型初始化 [-Wincompatible-pointer-types]
- c++ - 具有静态数据成员的对象的不同实例 - 可能吗?
- python - 在 python 3 中将 pdf 文件读取到文本文件,但会生成类似 AttributeError: 'PDFObjRef' object has no attribute 'decode' 的错误
- css - HTML表格布局中的中心内容
- android - 在Android中更改图像填充颜色
- c++ - 未实现赋值运算符时调用构造函数
- reactjs - 如何从另一个 React / ReactNative 组件触发 GraphQL 查询
- c# - 应用程序:应用程序启动器,无法移动目录,它正被另一个进程使用
- reactjs - 有什么方法可以防止用户在浏览器中通过 document.cookie 修改 cookie?