cmake - 如何根据谁使用它来定义目标库的符号
Posted
技术标签:
【中文标题】cmake - 如何根据谁使用它来定义目标库的符号【英文标题】:cmake - how to define symbol for target library depending on who use it 【发布时间】:2017-06-30 11:23:48 【问题描述】:我有 cmake 项目,有 3 个子项目。
我们称它为 A,B,C。
A - 子项目 B 和 C 的公共库(静态)。 B 和 C - 独立的可执行文件。
所以我需要以某种方式编译“A”库,以便在“B”中使用特定声明的定义(如 -DUSED_WITHIN_B_MODULE)。
另一方面,“C”可执行文件应该使用用另一组定义编译的“A”(如 -DUSED_WITHIN_C_MODULE)
请建议我如何实现它。 我知道用于 target_compile_definitions 的 PUBLIC/PRIVATE/INTERFACE 修饰符,但我不确定如何将它正确用于依赖树。
将不胜感激,谢谢。
【问题讨论】:
【参考方案1】:做这样的事情:
add_library(AforB a.cpp)
set_target_properties(AforB PROPERTIES COMPILE_FLAGS -DUSED_WITHIN_B_MODULE)
add_library(AforC a.cpp)
set_target_properties(AforC PROPERTIES COMPILE_FLAGS -DUSED_WITHIN_C_MODULE)
【讨论】:
以上是关于cmake - 如何根据谁使用它来定义目标库的符号的主要内容,如果未能解决你的问题,请参考以下文章
控制共享库的导出符号时,与“gcc -fvisibility=hidden”等效的 CMake 是啥?