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

时间:2015-07-15 17:54:28

标签: build static-linking pkg-config

我想提供一个(另外)支持静态链接的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 需要在动态/静态链接时使用不同的预处理器定义,并且还要在不同版本的lib中链接。

所以期望的输出是:

$ 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

所以问题是:

  • 是否可以为static变体提供不同的 CFLAGS / LIBS,而不仅仅是在动态变体上添加

2 个答案:

答案 0 :(得分:2)

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

您可以简单地在 .pc 文件中使用 Cflags.private。这也将通过正常的 CFLAGS,但您可以通过额外使用未定义标志来解决该问题。例如:

Cflags: -DFOO_DYNAMIC

Cflags.private: -UFOO_DYNAMIC -DFOO_STATIC

答案 1 :(得分:1)

简短回答:不。

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