编写支持 `--static` 的 pkg-config 文件

writing a pkg-config file that supports `--static`

我想提供一个(另外)支持静态 linking 的 pkg-config 文件。

通常你可以用这样的东西来做到这一点:

Libs: -L${libdir} -lfoo
Libs.private: -L${libdir} -lbar
Cflags: -I${includedir} -DFOO

这将产生:

$ pkg-config --cflags foo
-I/usr/local/include -DFOO
$ pkg-config --libs foo
-L/usr/local/lib -lfoo
$ pkg-config --static --cflags foo
-I/usr/local/include -DFOO
$ pkg-config --static --libs foo
-L/usr/local/lib -lfoo -lbar

不幸的是,我的库 foo 需要在 linking dynamically/statically 和 link 时使用不同的预处理器定义不同版本的库。

所以期望的输出是:

$ pkg-config --cflags foo
-I/usr/local/include -DFOO_DYNAMIC
$ pkg-config --libs foo
-L/usr/local/lib -lfoo
$ pkg-config --static --cflags foo
-I/usr/local/include -DFOO_STATIC
$ pkg-config --static --libs foo
-L/usr/local/lib -lfoo_static

所以问题是:

简答:否

解决方法是提供一个不同的 .pc 文件,命名为 foo-static.pc 或类似名称。

这里是老问题,但接受的答案在技术上是错误的。我没有对此进行测试,但我相信如果您使用 pkgconf 而不是原始的 pkg-config,它会支持 Cflags.private 字段。不,您不能从同一个 .pc 文件传递​​一组完全不同的 CFLAGS,但这没关系。

您只需在 .pc 文件中使用 Cflags.private。这也将通过正常的 CFLAGS,但您可以通过另外使用未定义标志来修复它。例如:

Cflags:-DFOO_DYNAMIC

Cflags.private: -UFOO_DYNAMIC -DFOO_STATIC