使用 PKG_CHECK_MODULES 时,autoconf 生成的 Makefile 不会传递库头的标志

2024-01-06

我的项目依赖于一个库(更准确地说,GTK+),所以我在我的项目中添加了以下配置configure.ac:

PKG_CHECK_MODULES([GTK], [gtk+-2.0])
AC_SUBST([GTK_CFLAGS])
AC_SUBST([GTK_LIBS])

My Makefile.am is:

bin_PROGRAMS = secretary
secretary_SOURCES = secretary.c

轮到我的secretary.c如下:

#include <gtk/gtk.h>

int main(int argc, char *argv[]) {
    gtk_init(&argc, &argv);
    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(window);
    gtk_main();
    return 0;
}

然而,当我跑步时make(当然,调用后./configure)我收到这个错误:

gcc -DHAVE_CONFIG_H -I. -g -O2 -MT secretary.o -MD -MP -MF \
   .deps/secretary.Tpo -c -o secretary.o secretary.c
secretary.c:1:21: fatal error: gtk/gtk.h: File or directory not found.

我缺少什么?为什么 autoconf 不将正确的标志传递给 gcc?


当你使用PKG_CHECK_MODULES,您需要指定标志Makefile.am。最简单的方法是将其添加到AM_LDFLAGS and AM_CPPFLAGS:

AM_LDADD = @GTK_LIBS@
AM_CPPFLAGS = @GTK_CFLAGS@

如果您想更具体,您可以添加:

secretary_LDADD = @GTK_LIBS@
secretary_CPPFLAGS = @GTK_CFLAGS@

不使用可能更容易PKG_CHECK_MODULES完全并让用户通过通常的机制指定库的位置(分配LDFLAGS或将库安装在标准位置)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PKG_CHECK_MODULES 时,autoconf 生成的 Makefile 不会传递库头的标志 的相关文章

  • 无法让 System.Numerics 在 OS X 上使用命令行 Mono (mcs)

    我们正在尝试在 OS X 上的命令行上运行一个简单的 Mono 脚本 大多数脚本对我们来说工作正常 但是一旦我们尝试使用 System Numerics 我们就会收到 错误 CS0234 类型或命名空间名称 Numerics 在命名空间系统
  • Automake:构建不被安装的共享模块

    如何告诉Automake构建一个不被安装的动态模块 pkglib LTLIBRARIES mywrapper la mywrapper la LDFLAGS no undefined module avoid version 导致 mywr
  • 为什么即使使用正确的 autoconf,autogen.sh 也会失败?

    autogen sh 失败 输出显示我需要更高版本的 autoconf 但事实上我有一个 2 6x autoconf 为什么仍然失败 mirror home 4 autogen sh autoreconf i f v autoreconf
  • 如何将共享库与 --as-needed 和 automake 链接起来?

    如何链接共享库 as needed使用Automake 当我尝试将标志添加到LDFLAGS I saw libtool如此称呼 bin bash libtool mode link Wl as needed dependencies 这会导
  • 如何使用自动工具设置包含路径

    我正在开发一个 C 项目 该项目使用autoconf automake 我正在努力正确设置包含路径 CPPFLAGS 我读了大约3个小时的文档 但我还没有弄清楚 我不是在寻找黑客 而是在寻找正确的方法来做到这一点 这是我的难题 据我所知 包
  • AM_LDFLAGS 和 LDFLAGS 有什么区别

    我想知道 AM LDFLAGS 和 LDFLAGS 之间有什么区别 因为我遇到了错误 error AM LDFLAGS must be set with before using 当我在 foreach 循环中使用 AM LDFLAGS 时
  • 使用 Libtool 将静态库强制链接到共享库

    我有一个图书馆 libfoo 编译后的使用libtool分成两个对象 libfoo a 和 libfoo so 我必须创造 使用libtool另外 另一个图书馆 libbar 这将是一个包含所有 libfoo 代码的共享库 libbar s
  • 如何通过 pkg-config 使用 C++ Boost 库?

    我成功编译并安装了最新版本的 Boost 库到我的 Linux 机器上 现在 我希望能够使用 pkg config 来简化提供 GCC 链接参数的过程 由于我懒得手动编码自己的 pc 文件 是否有一个脚本 工具可以自动生成所需的 pc 文件
  • 自动工具和 -Wl,-whole-archive

    是否可以告诉自动工具使用 Wl whole archive 标志链接库之一 生成文件 am bin PROGRAMS pktanon pktanon SOURCES main cpp pktanon DEPENDENCIES lib LIB
  • Autoconf 和 A​​utotools 的替代品? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 尝试为 ARM 构建 GDB 时出错

    我正在尝试为我的 Ubuntu 16 04 机器上的手臂构建 GDB 版本 8 0 我打算直接在arm机器上调试 目前没有服务器 我已经执行了这些指令 正如所解释的那样here https sourceware org gdb wiki B
  • 我可以在 distcheck 期间使用 $dc_install_base 安装 systemd 文件吗?

    我有以下用于安装 systemd 服务文件的 Autotools 代码 该文件必须安装在外部 prefix到 pkg config 变量指定的目录 我知道这是不正确的 但我无法改变 systemd 的工作方式 配置文件 AC ARG WIT
  • 将 autoconf 配置为具有 --with 选项来自定义构建

    我对 autoconf 和 automake 的工作原理有一个非常基本的了解 这是从各种教程中收集的 但是 由于我希望我的库在构建过程中保持灵活性 因此他们需要 with FEATURE and without FEATURE其他程序中常见
  • Autotools 库和目标文件输出控制

    我的目标是将所有目标文件构建在 objs 目录中而不是 Makefile 的根目录中 并将二进制文件 和库 复制到项目的bin 目录 但我一直无法找到任何资源来解释如何做到这一点 我该怎么做呢 这是我的configure ac和src Ma
  • 如何获取 autoconf configure.ac 中顶级构建目录的绝对路径?

    我正在开发一个项目 该项目需要一个具有自己的 makefile 和 configure ac 的子项目 子项目是用于为主项目生成源文件的程序 有一个选项可以禁用该项目的构建并尝试使用已安装的版本 无论哪种情况 我都会创建一个在 Makefi
  • 如何在 autoconf 配置脚本/makefile 中添加到库的链接

    我是一个自动工具新手 我很难轻松地弄清楚如何做 将特定库链接到配置的目标之一 我有一个源包 我想用通常的方式构建 configure make make install 不幸的是 其中一个 cpp 缺少对另一个库的引用 手动编译它 调整命令
  • 尝试安装 pecl 扩展时在 mac os x 10.7.3 上出现 $PHP_AUTOCONF 错误

    我正在尝试使用 pecl http 和 memcache 设置我的机器 在这两种情况下 我都会遇到类似的错误 这是在 MAC OS X 10 7 3 lion 上 我也在上面安装了 XCODE 在运行这些命令之前 我还安装了 Zend Se
  • 有关如何部署 C++ 代码以在任何地方工作的提示

    我不是在谈论制作可移植代码 这更多的是一个分配问题 我有一个中型项目 它对常用库有几个依赖项 例如 openssl zlib 等 它在我的机器上编译得很好 现在是时候将它呈现给世界了 本质上是构建最好的工程 我想制作适用于 Windows
  • 确保 config.h 包含一次

    我有一个库项目 正在使用 Linux 中的 autotools 套件移植到该项目 我对自动工具很陌生 本周 我已经了解了其操作的基础知识 我有一个关于如何保留内容的问题config h免遭重新定义 我惊讶地发现生成的config h文件也没
  • 如何使用autoconf重新生成配置文件?

    我使用 autoconf 重新生成配置文件 它有效 但是当我执行生成的配置文件时 configure 有一些错误消息 例如 configure line 3713 syntax error near unexpected token bla

随机推荐

  • 连接基于文档的应用程序中的菜单项

    我已经就这个主题提出了几个问题 但还没有真正收到关于如何做到这一点的真正答案 它实际上收到了 风滚草徽章 哈哈 我有一个基于文档的应用程序 意味着 Menu Xib 与 MyDocument Xib 是分开的 假设我想向 MyDocumen
  • 如何去除图表中的白色区域? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 How can I remove white areas 1 2 and reduce width of axis 3 in char
  • 根据 antd 表的列过滤它

    首先 英语不是我的母语 所以可能会有错误 我开始用钩子做出反应 因为每个人都说它更容易 这里我有 antd 表和一个按钮 bootstrap 5 模式 这个模式包含 6 个按钮 id 标题 名字 姓氏 全选 确认您的选择 我的观点是用户从
  • 未捕获的 TypeError:无法使用“in”运算符在未定义的 vue 路由器中搜索“路径”

    当我在任意点上随机从一个组件移动到另一个组件时 vue 会给出此错误 然后我无法移动另一个组件 此错误不在任何特定组件上 它可能在任何地方发生 error Uncaught TypeError Cannot use in operator
  • 将当前位置设置在自动完成片段中

    我想在创建活动时将当前位置设置到位置自动完成片段中 我能够加载 Google 地图 API 并且已在我的应用程序中成功实现放置自动完成片段 但是 我希望位置自动完成片段将当前位置设置为位置自动完成片段中的默认字符串 就像优步一样 当我们打开
  • 之间的间隙
  • 为了避免长列表 我将 li 设置为 float left 以便它们交替行 然而 有时当 li 中的内容占据两行时 这会导致元素之间出现无意的间隙 我的 HTML 是 ul class gmc ingredient list li 500g
  • didUpdateLocations 而不是 didUpdateToLocation

    随着 iOS6 的发布 Apple 希望我们使用 didUpdateLocations 而不是 didUpdateToLocation 谁能解释如何正确使用 didUpdateLocations 我假设您使用以下代表来获得最后一个位置 vo
  • 与 Java 7 兼容的旧项目

    我的旧项目使用Java 6 1 6 我不知道当我更新 Java 7 时 它们可以正常运行吗 有一个官方名单 http www oracle com technetwork java javase compatibility 417013 h
  • 从 IOwinContext 获取路由模板

    我希望从请求中获取路线模板 我正在使用 Owin 中间件 并重写接受 IOwinContext 的 Invoke 方法 public override async Task Invoke IOwinContext context 给定请求
  • 在 php.ini 中设置默认欧洲时区,但 date_default_timezone_get() 返回 'UTC'

    我已经设置了php ini文件默认时区 date timezone Europe Rome 我也重启了httpd编辑后的服务 服务httpd重新启动 但是当我打电话时date default timezone get 它返回 UTC 值 为
  • 大内存块未被垃圾收集

    在寻找应用程序中的内存泄漏时 我追查了一个我无法理解的行为 我分配了一个大内存块 但它不会被垃圾收集 从而导致 OOM 除非我在 onDestroy 中显式将引用设为 null 在此示例中 我有两个几乎相同的活动 它们相互切换 两者都有一个
  • 时间:2019-03-17 标签:c#datagridviewredcross

    我有一个数据网格视图和数据表 我使用数据表作为 datagridview 的数据源 我使用线程添加和更新数据 如下所示 如果我处理完数据 我会将其删除 但有两次大红色x在 datagridview 前面 我没查出为什么 以下是我的样本 No
  • 仪器 > 设备灰显

    我正在 iOS 设备上运行一个应用程序 但在 Instruments 中 该设备显示为灰色 这也意味着我无法附加该过程 无法使用设备上的 Instruments 启动 iOS 应用程序 https stackoverflow com que
  • 使用 UIWebView 构建 HTML5 iOS 应用程序

    我有一位客户建议我们只需创建一个 UIWebView 并将所有应用程序逻辑卸载到 HTML5 应用程序即可将 HTML5 应用程序包装为本机 iOS 应用程序 这将使我们能够拥有一个 原生 iOS 应用程序和一个适用于其他设备的优秀移动应用
  • 如何使用C#获取Sql Server 2005的列描述?

    我可以在 C 中使用 Microsoft SqlServer Management Smo Table 来获取 Sql Server 2005 数据库的表列 我已经得到了column Name 但是如何在C 中获取该列的描述 我看过链接 S
  • 如何执行Realm计数查询

    如何在 Realm 上进行计数查询 例如这是我的模型 class Dog Object dynamic var name class Person Object dynamic var name let dogs List
  • 如何从Python文件的末尾开始读取行

    我需要知道如何从 python 文件中读取行 以便我先读取最后一行 然后以这种方式继续 直到光标到达文件的开头 有任何想法吗 解决此问题的一般方法是按行反向读取文本文件 可以通过至少三种方法来解决 一般问题是 由于每行可以有不同的长度 因此
  • java mysql 统计行数

    我创建此代码是为了允许我计算表中的行数 但是 我无法返回计数的数字 并显示错误 无法从结果类型为 void 的方法返回值 有人可以告诉我我的错误在哪里吗 多谢 public void num throws Exception try Thi
  • 马根托。结帐购物车中的数量无法正常使用

    我已经安装了 Magento 1 8 0 并且在本地主机上购物车工作正常 我更改购物车中产品的数量 然后按下 更新购物车 按钮 一切正常 我把网站转移到网上 购物车数量不再起作用了 当我更改产品数量并单击按钮时 数量保持不变 如果我返回并尝
  • 使用 PKG_CHECK_MODULES 时,autoconf 生成的 Makefile 不会传递库头的标志

    我的项目依赖于一个库 更准确地说 GTK 所以我在我的项目中添加了以下配置configure ac PKG CHECK MODULES GTK gtk 2 0 AC SUBST GTK CFLAGS AC SUBST GTK LIBS My