c++ - cmake - 如何根据使用它的人为目标库定义符号

标签 c++ makefile cmake

我有 cmake 项目,有 3 个子项目。

我们称它为 A、B、C。

A - 子项目 B 和 C 的公共(public)库(静态)。 B 和 C - 独立的可执行文件。

所以我需要以某种方式编译“A”库,以便在“B”中使用特定声明的定义(如 -DUSED_WITHIN_B_MODULE)。

另一方面,“C”可执行文件应该使用用另一组定义(如 -DUSED_WITHIN_C_MODULE)编译的“A”

请建议我如何实现它。 我知道 target_compile_definitions 的 PUBLIC/PRIVATE/INTERFACE 修饰符,但我不确定如何正确地将它用于依赖树。

将不胜感激,谢谢。

最佳答案

做这样的事情:

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)

关于c++ - cmake - 如何根据使用它的人为目标库定义符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44845324/

相关文章:

makefile - make echo 在生成的文件中包含引号

c - 图书馆包括哪些功能?

c++ - Boost 1.59 链接器错误

cmake - 如何检查为什么 cmake 配置在 find_package() 中被拒绝

c++ - 如何在应用程序退出时诊断访问冲突

c++ - 文件重定向运算符 ">"不适用于 CreateProcess() API

c++ - Gnu Make 的递归性和 friend

c - CMake 如何使用可执行 bin 脚本分发第三方库

C++ 实例化结构错误,为什么不允许这样做?

c++ - strtok 没有标记 char* 这个程序也没有打印任何数据