我想提供一个(另外)支持静态链接的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,而不仅仅是在动态变体上添加?答案 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文件。