问题标签 [automake]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
508 浏览

c++ - 构建 PHP 扩展时如何检查未损坏的 C++ 符号?

我有一个用 C++ 编写的 PHP 模块,它依赖于安装的 C++ 库(Boost Date_Time)。

目前,在我的 config.m4 文件中,我正在检查库,如下所示:

现在,这适用于我当前的环境,但我痛苦地意识到这可能会在不同版本的库或编译器上中断。

如何让 automake 理解未损坏的 C++ 符号?

编辑:

我意识到检查损坏的名称是可怕的,但是没有某种方法可以检查“nm -C”返回的符号名称(例如 boost::gregorian::bad_month 等)。

我发现了一些对 automake 命令 AC_LANG_CPLUSPLUS() 的参考,但我不确定如何使用它以及它是否适用于这里。

0 投票
2 回答
2221 浏览

autoconf - Automake 和同名文件

我有一个 C++ autoconf 托管项目,我正在调整它以在 FreeBSD 主机上编译。最初的系统是 Linux,所以我做了一个 AM_CONDITIONAL 来区分我正在构建的主机并将代码分成系统特定的文件。

配置.ac

生成文件.am

当我运行 automake 时,它​​会失败并显示以下消息:

即使在 Makefile.in 构建过程中,关于如何配置 automake 以尊重此条件的任何想法?

如果文件有不同的名称,我可以这样做,但它是 c++ 代码,我试图保持文件名与类名相同。

提前致谢!

0 投票
4 回答
549 浏览

c++ - 重构构建系统以使用 Autotools

在过去的几天里,我一直在阅读使用autotools来构建我的项目,而不是过去几个月我拼凑的 Makefile。不幸的是,我还没有找到一个例子来让我对我的项目结构目前的情况有足够的了解。

我的项目的应用程序代码中包含三个库。我正在寻找使用单个配置脚本来制作(和安装)应用程序和库的最佳方法。

0 投票
4 回答
4464 浏览

gcc - 如何在不链接 Automake 的情况下进行编译?

我是 Automake 的新手,我试图在不链接的情况下进行编译。我的目标是使用 Automake 生成一个简单的 Makefile,如下所示。

到目前为止,我的尝试将我带到了以下 Makefile.ac。

如何模拟我的原始 Makefile?

0 投票
1 回答
1486 浏览

makefile - 应用前autoconf编译依赖

在过去的几天里,我一直在使用 autotools 工具,终于取得了重大进展。我遇到的一个问题是我有两个库需要在主应用程序代码之前编译。我不太确定该怎么做。我的目录结构如下,也是我的 configure.ac 的一个片段。

我需要在src/Makefile之前编译csv/Makefilegtkworkbook/ Makefile ;有没有办法指定这个?现在我收到一个关于应用程序编译过程中不存在的库(csv)的错误。

0 投票
2 回答
8035 浏览

makefile - Autotools 库和目标文件输出控制

我的目标是将所有目标文件构建在 .objs 目录而不是 Makefile 的根目录中,并将二进制文件(和库)复制到项目的bin/目录中。但我一直找不到任何资源来解释如何做到这一点。我该怎么做呢?

这是我的 configure.ac 和src/Makefile.am - 对于两个引用的共享库,我有类似的 Makefile.am 文件。它们编译,并在将它们复制到bin/目录后正常工作。我只是想自动化这个过程。

配置.ac

src/Makefile.am

所以,我的问题是如何为每个 Makefile 的编译结果指定输出目录(我希望它们被复制到bin/,并且目标文件在每个项目的.obj中而不是在 Makefile 的根目录中.

感谢您迄今为止的帮助。这个网站是一个很好的资源,我从已经提供的链接中学到了很多东西。

0 投票
1 回答
5897 浏览

c++ - 使用单个安装生成静态库和可执行文件 (autoconf)

我知道如何构建项目或如何使用 autoconf 创建库。

我想要实现的是生成一个静态库并使用该库在单个 configure/make/make install 运行中构建一个项目。

我希望将一些源文件放入库中,其余的则使用该库进行编译。

如何修改 makefile.am 文件和 configure.ac 以使其正常工作?

0 投票
4 回答
1919 浏览

makefile - 在非常简单的 gtk2 c 应用程序中,设置 gnu 构建工具的问题

更新:第一个问题解决了,第二个在这篇文章的底部描述。

UPDATE2:第二个问题也解决了。

我正在尝试学习如何为一个非常简单的 GTK+2 C 应用程序设置 GNU 构建工具(autoconf/automake)。我已经按照这个教程这个处理子目录的教程,但是我遇到了一个问题,我的源目录(在 src 子目录中)没有生成 Makefile,尽管父目录的 Makefile 正在生成。

首先,这是我的文件夹结构:

以下是重要文件的内容:

应用程序/configure.ac:

应用程序/Makefile.am:

应用程序/src/Makefile.am:

Here is what happens when I run the following commands:

When I check, the main app folder gets a Makefile and Makefile.in, but the src folder still only has the Makefile.am. Any ideas?

UPDATE: I made the changes mentioned by adl, namely, I removed the square brackets and comma from the AC_CONFIG_FILES command and removed the app name/version from the AM_INIT_AUTOMAKE command. I also changed the app_LDADD command in src/Makefile.am to app_LDFLAGS. This has fixed my initial problem of not getting through a configure, but now it isn't looking for the gtk libraries. When I do a make I get something like the following:

Here is what I get with pkg-config:

I'm pretty sure I'm doing something wrong in my src/Makefile.am, but I don't know what. If it helps, my configure script does not appear to be looking for any gtk libs.

UPDATE2:

So the basic solution for the problem in update1 seems to be that I needed to add the following check to my configure.ac file:

This gets added to the checks for programs section under AC_PROG_CC. What this does is tell configure to check for the gtk+-2.0 library. The upper case GTK seems to be an arbitrary variable name, and the CFLAGS, LIBS, and LDFLAGS (and probably more) gets added to it dynamically so that you can generate the PACKAGE_* variables. The AC_SUBST seems to make it so you can access the PACKAGE* variables in your Makefile.am's. FYI, the -export-dynamic flag is added so that you can use glade/gtkbuilder files (I'm sure there are other reasons, but I'm still at a very basic level of understanding).

In src/Makefile.am, you should have:

This seems to be all you need for a basic gtk+-2.0 C app. It has actually inspired me to write a simple tutorial for setting up a C gtk app that uses autotools. There is a definite lack of recent beginner documentation/information in this field.

0 投票
3 回答
1685 浏览

makefile - 如何设置 automake 和 autoconf 以有条件地构建程序(测试或其他)

我目前在我的 autotoolset 项目中有 10 个测试。每当我对我的一个 src/ 文件进行更改并重新编译时,都会重新构建和链接每个测试。这开始对我的开发时间产生相当大的影响。

使用 GNU autotoolset 有条件地构建二进制程序、测试或其他方式的最佳方法是什么?例如,如果我在 test/check_curl_requestheaders.cc 中工作,并且我进行了更改,我只想重新编译库,然后重新编译一个测试,而不需要重新编译其他二进制文件。

我看到有人提到使用 automake 条件(如 WANTS_XXX),但我不能 100% 确定这是我正在寻找的,也不确定 autoconf 将如何配置它。

我有点希望最终会看起来像这样:

或者

指针?

编辑我没有在每次制作之前进行配置。check_curl_requestheaders如果我对, only进行更改,check_curl_requestheaders则会按预期进行重建。问题是,如果我正在处理库的 RequestHeaders 部分,并更改为 src/curl/requestheaders.cc,则所有测试和其他二进制文件都会重新构建,而不仅仅是check_curl_requestheaders. 花费的时间太长了,而这正是我试图避免的。如果我有十几个二进制文件,有没有办法只重建其中一个?

0 投票
2 回答
4317 浏览

c++ - 我应该在哪里使用 automake/autoconf 项目解决符号查找/未定义符号?

在一个项目中,我noinst_PROGRAM定义了两个 's。其中一个工作得很好,但另一个给我以下信息:

/home/altern8/workspaces/4355/libgdata/test/.libs/lt-gdatacalendar:符号查找错误:/home/altern8/workspaces/4355/libgdata/test/.libs/lt-gdatacalendar:未定义符号:_ZN5gdata7service7ServiceD1Ev

我一直在查看我的 Makefile.am 文件,但找不到任何我错过的东西。该应用程序编译正确,所以我猜这意味着正确找到了头文件,但由于某种原因我gdata::service::Service没有包含在 src/libgdata.la 库中。

我的假设可能是正确的吗?src/libgdata.la 库中定义的其他类似乎可用。“make”的输出表明 Service.cc 文件正在正确编译......我应该在哪里确定它是否包含在最终库中的任何指针?

编辑:

根据迄今为止提供的答案,我已经能够进一步调试它。

析构函数在 Service.cc 中定义。如果我在头文件中给析构函数一个主体,一切都会正常工作。

现在析构函数“工作”了,我遇到了在 Service.cc 中定义的其他方法,但没有找到。

使用@ephemient 的方法,在我看来这些符号实际上已包含在库中。还是我错误地读取了输出?

我的 src/Makefile.am 看起来像这样:

我的 src/gdata/service/Makefile.am 看起来像这样:

我的 test/Makefile.am 看起来像这样:

gdatayoutube 工作得很好。它是使用来自客户端目录而不是服务( gdata/client/libgdata_gdata_client.la )的代码的旧代码......我看不出如何从服务设置客户端之间有任何区别。:-/

**编辑#2:##

好吧,我不知道这是怎么发生的,但我想我发现了我的问题。我认为测试应用程序链接的是我正在处理的库的已安装版本,而不是 src/ 中内置的本地版本。

我将对此进行更多探索,也许下次再问一些其他问题。