问题标签 [autotools]

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 投票
3 回答
2041 浏览

sed - 为 Makefile.am 中的源调用 SED

我有 c++ 代码,需要在编译之前对其进行 sed 处理。我怎么把它放进去Makefile.am

我尝试了典型的 makefile 设置,但目标似乎不存在:

gentest.cc:

$(SED) -i "s|FIND|REPLACE|" gentest.cc

如果您对我为什么要这样做感兴趣,那是因为我slider3.py用 python 编写了我的程序 (),而我的伙伴用 c++ ( gentest.cc) 编写了他的程序,他需要打电话给我。我通过编辑argv然后使用execv().

... {

char **argv2 = new char*[argc];

memset(argv2,0,sizeof(argv2));

argv2[0] = "__PREFIX__/bin/slider3.py";

memcpy(argv2 + 1, argv + 2, sizeof(char *) * (argc - 2));

int oranges = execv(argv2[0], argv2);

printf("%s\n", strerror(oranges));

return oranges;

} ...

我已经处理了#!添加到slider3.pychmod +x使用不适用于gentest.cc. 我还处理了添加slider3.py到已安装文件的列表。

EXTRA_DIST=testite.sh slider3_base.py

bin_SCRIPTS = slider3.py

CLEANFILES = $(bin_SCRIPTS)

slider3.py: slider3_base.py

rm -f slider3.py

echo "#! " $(PYTHON) > slider3.py

cat slider3_base.py >> slider3.py

chmod +x slider3.py

gentest以这种方式定义Makefile.am

bin_PROGRAMS = gentest

gentest_SOURCES = gentest.cc

gentest_LDADD = libgen.a #../libsbsat.la $(LIBM)

这在 make 期间无法运行(注意@模式在 中成功扩展Makefile):

gentest.cc:

$(SED) -i "s|__PREFIX__|@prefix@|" gentest.cc

关于如何sed在编译之前运行的任何想法gentest.cc

0 投票
2 回答
2149 浏览

autotools - 使用 Autotools 预编译的头文件

是否可以在使用 automake / libtool 的项目中使用 gcc 预编译头文件?

添加新的 make 规则来构建预编译的头文件并不困难。问题是您还必须添加 libtool 和 AFAIK 引入的编译标志,它无法处理头输入文件。

你怎么能那样做?

0 投票
2 回答
724 浏览

autotools - libtool 被“make distclean”删除

我已将 libtool 复制到我的程序的源代码树中,以便与程序一起分发它。但是当我运行“make distclean”时,libtool 会与其余生成的文件一起被删除。我该如何阻止这种情况发生?

我尝试放入EXTRA_DIST = libtoolMakefile.am 但这不起作用。

这基本上是我的 configure.ac 的样子。

0 投票
4 回答
2820 浏览

c - Autoconf 问题:“错误:C 编译器无法创建可执行文件”

我正在尝试使用 GNU autotools 构建我用 C 语言编写的程序,但我显然设置错误,因为configure运行时,它会吐出:

如果我查看config.log,我会看到:

出于某种原因,autoconf 正在生成一个无效的测试文件:该行上应该是什么,只是一个分号?在 Ubuntu 9.04 和 Mac OS X 10.6 上构建失败的方式相同,所以这绝对是我的错,而不是环境的错。

0 投票
2 回答
2452 浏览

automated-tests - 向 autotools 项目添加额外的 make/test 目标

我们有一个 autotools 项目,它混合了单元测试和集成测试,所有这些都通过“make check”运行。这并不理想,因为一些集成测试需要一段时间,并且有各种依赖项(数据库等)

我想分离集成测试并为它们分配自己的 make 目标。这样,仍然可以经常运行单元测试(通过 make check),并且可以根据需要以类似的方式运行集成测试。

是否有一种直接(或其他)方式来添加额外的 make 目标?

注意:我可能还应该补充一点,这是一个大型项目,因此手动编辑/维护每个 makefile 是不可取的。如果可能的话,我想用“自动工具方式”来做。

-- 更新 1 --

我已经尝试过Jon的解决方案,它更接近了一步,但并不完全在那里。我还有几个问题:

1)递归 - 我可以修改构建树根目录中的 makefile.am 以及包含测试的任何目录,但似乎应该有一种方法可以在我没有的地方做到这一点更改层次结构中的每个 Makefile.am。(毕竟检查目标是这样工作的)

2) .PHONY - 我不断收到关于 .PHONY 被重新定义的消息。这是可以理解的,因为它是由另一个包(特别是 doxygen)设置的。怎样才能让两个人一起玩好呢?

0 投票
2 回答
556 浏览

autotools - 我应该如何从 Makefile.am 运行预构建的 Makefile?

我应该如何从 Makefile.am 运行预构建的 Makefile?

我是 automake/autoconf 构建系统的新手。我正在为其实现 autotools 的包有几个库和每个库的测试可执行文件。一些库是自动生成的 ASN1C 代码,带有预构建的 makefile。我不确定在 Makefile.am 内部说“使用预构建的 makefile 构建 ASN1C 库”的最佳方式。

由于大量的 makefile 文档,尝试用这样的东西搜索 google 有点困难。

谢谢,陈兹

0 投票
4 回答
2510 浏览

build - 为什么没有人为脑死亡者创建开源构建系统?

我想建立一个共享库。GNU/Linux 是开发和目标平台。C是实现语言。

我无法决定我想如何设置构建系统并一直在三个选项之间徘徊,每个选项都有很多不喜欢的理由:

  • 手工制作的 Makefiles - 我过去几乎都是这样工作的
  • GNU Autotools - 今年早些时候我使用 autotools 构建了一个共享的 C 库,但忘记了我是如何做到的,以及我在哪里使用了数百个教程。
  • waf - 据说很简单,但不是那么容易我今天下午就开始工作了。

我无法决定去哪个。我会选择一个,开始工作,然后遇到问题并决定另一个系统更好。我被卡住了。有人可以对此有所了解,这可能会帮助我解决这个问题吗?

0 投票
3 回答
3108 浏览

autotools - 在 C/C++ 项目中自动检测库依赖关系的最佳方法是什么?

在 C/C++ 项目中自动检测库依赖关系的最佳方法是什么?

我有一个项目,我拥有机器上的所有依赖项。它构建并运行。现在我想组合一个自动工具构建系统。我正在寻找一种自动检测所需的所有依赖项的好方法,例如使用的头文件和链接所需的库。

图书馆位似乎是我最难弄清楚的。我想说,为列表或其他东西中的每个函数生成 AC_CHECK_LIB 命令。我可能可以在 Perl 中做到这一点,但我必须想象它已经存在于其他地方。

我所知道的是我可以使用 objdump 和 nm 查看符号,我可以使用这些实用程序找到函数所属的库,然后我可以在 configure.ac 中手动输入 AC_CHECK_LIB 命令来检查它。在这一点上,自动化会很棒。

谢谢,陈兹

0 投票
2 回答
7179 浏览

iphone - 为官方 iPhone SDK 交叉编译基于 Autotools 的库

背景

我正在编写一个针对几种不同手机的程序,包括 iPhone。该程序依赖于几个第三方库。我很难为 iPhone 和 iPhone 模拟器交叉编译这些第三方库。这些库包括 Apache Portable Runtime 和 GNUTLS,以及它们的依赖项。我希望构建的库以前缀“/opt/iphone-3.1”、“/opt/iphone-3.0”、“/opt/iphone-2.2.1”、“/opt/iphone-simulator-3.1”结尾”和“/opt/iphone-simulator-3.0”。

为了使交叉编译过程易于重复,我正在创建脚本来为每个目标平台调用“配置”脚本(“iphone3.1-configure”、“iphone3.0-configure”、“iphone2.2.1 -configure”、“iphonesim3.1-configure”和“iphonesim3.0-configure”)。这是我遇到麻烦的地方。

我正在使用带有官方 Xcode 3.2 + iPhone SDK 3.1 的 Mac OS X 10.6 Snow Leopard 计算机。

地位

我目前有以下“iphone3.1-configure”脚本:

在“apr-1.3.8”文件夹中,我正在运行“iphone3.1-configure --disable-dso”,并且得到:

“config.log”的相关部分是:

问题

如何修复“iphone3.1-configure”脚本?谢谢。

0 投票
1 回答
7059 浏览

iphone - 将 Apache Portable Runtime 交叉编译到 iPhone

这是对之前关于 iPhone 交叉编译的问题的跟进:
为官方 iPhone SDK 交叉编译基于 Autotools 的库

基本上,我正在尝试为 iPhone 编译 Apache Portable Runtime (APR) 版本 1.3.8(最新)。我目前在配置步骤中遇到以下错误:

我正在通过“iphone3.1-configure --disable-dso --enable-threads”调用“configure”脚本,其中“iphone3.1-configure”是我为调用“配置”脚本:

configure 给我的错误并不是我第一次收到类似“交叉编译时无法运行测试程序”的消息。事实上,“iphone3.1-configure”脚本中的“ac_cv_file__dev_zero=no”和“ac_cv_func_setpgrp_void=yes”元素会导致两个类似的失败测试被绕过。我遇到的问题是我不知道如何绕过此检查-也就是说,我不知道要设置哪些变量来绕过此测试以及尝试运行为目标构建的可执行文件的任何其他测试平台。我之所以能够绕过前面两个类似的测试,仅仅是因为我能够在 Google 上找到解决方法……有人知道要设置哪些变量或绕过此检查的另一种方法吗?

如果有人知道一种方法来抑制交叉编译时无法执行的所有测试,或者如果您只知道如何抑制这种特定检查,我将不胜感激。非常感谢你。