如何在pkgconf文件中指定仅适用于共享库的编译标志?
问题解决思路
首先明确:标准pkg-config确实没有专门针对共享库的Cflags.shared这类属性,这是它当前设计里的局限,不是你漏看了。
给你两个可行的解决办法:
- 拆分pkg-config配置文件:分别创建两个.pc文件,比如
protobuf-shared.pc和protobuf-static.pc。在共享库的.pc里把-DUSED_ONLY_FOR_SHARED放到Cflags里;静态库的.pc里则只保留通用编译标志,不加这个宏。用户编译时只需指定对应配置文件即可,比如编译共享库时用pkg-config --cflags protobuf-shared,静态库用pkg-config --cflags protobuf-static。很多大型库(比如protobuf本身)其实也会采用这种方式区分静态/共享的编译配置。 - 头文件条件编译补位:如果不想拆分配置文件,可以在库的公共头文件里加条件判断,比如:
这样用户编译静态库时手动加#ifndef _PROTOBUF_STATIC #define USED_ONLY_FOR_SHARED #endif-D_PROTOBUF_STATIC就能跳过这个宏定义,但这种方式依赖用户手动配合,不如拆分pc文件来得严谨。
内容的提问来源于stack exchange,提问作者David Given
相关产品推荐
相关产品推荐

