首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写支持“--静态”的pkg-config文件

编写支持“--静态”的pkg-config文件
EN

Stack Overflow用户
提问于 2015-07-15 17:54:28
回答 2查看 994关注 0票数 0

我想提供一个支持静态链接的pkg-config文件。

通常你可以这样做:

代码语言:javascript
复制
Libs: -L${libdir} -lfoo
Libs.private: -L${libdir} -lbar
Cflags: -I${includedir} -DFOO

这将产生:

代码语言:javascript
复制
$ 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需要在动态/静态链接时使用不同的预处理器定义,还需要在库的不同版本中进行链接。

因此,所需的输出将是:

代码语言:javascript
复制
$ 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,而不仅仅是在动态变量的基础上添加?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-19 18:22:16

简短回答:不。

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

票数 1
EN

Stack Overflow用户

发布于 2021-02-06 16:55:31

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

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

旗子:-DFOO_DYNAMIC

Cflags.private:-UFOO_DYNAMIC -DFOO_STATIC

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31437652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档