【问题标题】:writing a pkg-config file that supports `--static`编写支持 --static 的 pkg-config 文件
【发布时间】:2015-07-15 17:54:28
【问题描述】:

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

所以期望的输出是:

$ 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,而不仅仅是在动态变体之上添加

【问题讨论】:

    标签: build static-linking pkg-config


    【解决方案1】:

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

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

    Cflags:-DFOO_DYNAMIC

    Cflags.private:-UFOO_DYNAMIC -DFOO_STATIC

    【讨论】:

      【解决方案2】:

      简短回答:不。

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

      【讨论】:

      • 在 stackoverflow 上,我们也感谢您提供“长答案”。
      猜你喜欢
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 2012-08-29
      相关资源
      最近更新 更多