问题标签 [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 投票
1 回答
338 浏览

bison - 将生成的文件添加到分发的最佳方法?

我有一个使用 autoconf / automake 的非常复杂的(C++)项目,其中包括一些“生成的”文件(foo.yy -> foo.cc)。实际构建是使用“控制脚本”(Gentoo .ebuild 对于那些熟悉该概念的人)在各种平台上完成的。

现在,其中一个目标平台不正确支持 foo.yy -> foo.cc 步骤,必须使用在 Linux 机器上生成的 foo.cc 文件。

现在我有两种方法可以解决这个问题:

1) 将 foo.cc 签入项目存储库,并以某种方式修补 configure.in(或其他)以包括对 foo.yy / foo.cc 的时间戳检查,如果在有问题的目标上运行时会生成一个可理解的错误消息,并且过时foo.cc;

2) 将 foo.cc 签入到控制脚本库中,并有脚本控制时间戳并给出错误消息。

我可以做 2) 没问题,但我认为这不是放置 foo.cc 的正确位置。

另一方面,我对 autoconf / automake 了解不多,也不知道如何在 configure.in (或任何地方)中实现时间戳检查 / 错误消息。

您有什么建议,这里有人知道如何解决解决方案 1)吗?

编辑:使用解决方案 3) 解决,调整有问题的目标框,直到它能够自己执行 foo.yy -> foo.cc 步骤。我的问题解决了。

但我会留下这个问题 - 如何使用 autoconf / automake 进行时间戳检查 / 可理解的错误消息?

0 投票
4 回答
1689 浏览

msbuild - 为什么 autoconf/automake 项目会链接到已安装的库而不是本地开发库?

我正在创建一个libgdata包含一些测试和未安装程序的库。我遇到的问题是,一旦我安装了库一次,程序似乎链接到已安装的版本,而不是本地版本../src/libgdata.la

什么可能导致这种情况?我做错了什么可怕的事情吗?

这是我的test/Makefile.am样子:

libapiutil是另一个库,它有一些帮助处理 libcurl 和 libxml++ 的东西)

因此,例如,如果我在没有安装任何东西的情况下运行测试,一切正常。我可以在本地进行更改,它们会立即被这些程序拾取。

如果我安装该软件包,这些程序将编译(看起来它实际上确实在本地查找标头),但是一旦我运行该程序,它就会抱怨缺少符号。

据我所知,它基于 make 输出链接到新建的库(../src/libgdata.la),所以我不确定为什么会发生这种情况。如果我删除已安装的文件,对 src/* 的本地更改会被很好地拾取。

我在下面包含了 gdatacalendar 的 make 输出。

帮助。:)

更新

addCommonRequestHeader()当我在安装没有该方法的库之后将方法添加到 Service 类时,当我尝试运行日历程序时收到以下消息addCommonRequestHeader()

尤金尝试设置$LD_LIBRARY_PATH变量的建议没有帮助。

更新 2

我做了两个测试。首先,我在删除了我的 dev-install 目录(--prefix)之后这样做了,在这种情况下,它会创建test/.libs/lt-gdatacalendar. 但是,一旦我安装了库,它就会创建test/.libs/gdatacalendar。ldd 的输出对于两者都是相同的,但有一个例外:

什么会导致在一种情况下创建 lt-gdatacalendar 而在另一种情况下创建 gdatacalendar?

ldd 在 libgdata 上的输出是:

0 投票
1 回答
3718 浏览

macos - LTLIBRARIES:mv *.Tpo *.Plo,但前者不存在,后者已经存在

我正在将现有库(libtcod)直接转换为 Autotools(为了 OS X 的快乐)。不幸的是,当我将我Makefile.amlib_LIBRARIES规则切换到lib_LTLIBRARIES时,构建会从成功变为 un。摘自以下输出:

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

src/.deps包含:

我在这里犯了一个明显的错误,还是应该这样做?

0 投票
4 回答
3755 浏览

php - 在 OS X 上从源代码构建 PHP 5.2.10 时链接 libresolv 时出错

首先,我通常会选择使用 PHP 的预编译二进制文件,但需要从源代码构建以满足特定的业务需求。(我不是那种为了好玩而编译开源应用程序的类型。)

我在 OS X 10.6 上构建,当我尝试将makePHP 5.2.10 作为 Apache 模块(--with-apxs2)时遇到以下错误:

这些符号是 的一部分libresolv,它包含在/usr/lib/libresolv.dylibOS X 上(并且至少从10.4 开始)。请注意,*.dylib文件是 Linux 上文件的 Mac 等价物*.so,我libiconv.dylib已经通过传递成功编译了--with-iconv=shared,/usrto ./configure,这消除了iconv库的类似链接器错误。

当我运行时,它会在 makefile 中./configure检测并启用它。/usr/include/resolv.h但是,我似乎无法弄清楚如何让共享库正确链接。关于让它发挥作用的任何提示?我从来没有做过任何类似将自定义链接器标志传递./configure给的事情,不幸的是,谷歌在这个问题上对我没有帮助。


编辑:如果有人想尝试在 Snow Leopard 上复制错误,我正在从这个 TAR 下载中构建。

0 投票
4 回答
11503 浏览

autotools - 如何让 autotools 使用英特尔编译器进行编译?

我希望我的代码可以使用 Intel 编译器或 gcc/g++ 编译,具体取决于配置参数。这可能吗?我需要在 configure.ac 和 Makefile.am 文件中添加什么来实现这一点?

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 投票
8 回答
3191 浏览

makefile - 是否值得学习 GNU Make?

我最近觉得有必要学习一个构建工具。我正在通过 StackOverflow 寻找建议,而 Gnu Make 几乎没有被提及。相反,我看到了 Ant、Maven、CMake、Scon 和许多其他人。但是,当我查看有时必须编译的小“流氓源”(如不在仓库中)时,它们都需要这些make && make install步骤。

学习是不是比学习另一种工具更浪费时间?

如果是这样,为什么 Make 仍然如此受欢迎?

0 投票
2 回答
2149 浏览

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

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

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

你怎么能那样做?

0 投票
5 回答
48474 浏览

c++ - C++ 库的目录结构

我正在开发一个 C++ 库。最终,我想让它在多个平台(至少 Linux 和 Windows)上公开可用,以及一些示例和Python绑定。工作进展顺利,但目前该项目相当混乱,完全内置于 Visual C++ 中并用于Visual C++,根本不是多平台的。

因此,我觉得清理工作是有必要的。我想改进的第一件事是项目的目录结构。我想创建一个适合Automake工具的结构,以便在多个平台上轻松编译,但我以前从未使用过这些。由于我仍将在 Visual Studio 中进行(大部分)编码,因此我还需要在某个地方保存我的 Visual Studio 项目和解决方案文件。

我试图用谷歌搜索“C++ 库目录结构”之类的术语,但似乎没有任何有用的东西出现。我找到了一些非常基本的指导方针,但没有明确的解决方案。

在查看一些开源库时,我想到了以下内容:

我以前没有/很少有多平台开发/开源项目的经验,并且很惊讶我找不到任何关于如何构建这样一个项目的好的指导方针。

通常应该如何构建这样一个图书馆项目?可以推荐阅读什么?有没有一些很好的例子?

0 投票
4 回答
7451 浏览

autoconf - 如何将 autoconf/automake 指向非标准包

我正在尝试在 RedHat Linux 机器上构建 ZooKeeper。(ZooKeeper 到底是什么可能并不重要 :-)

当我按照包装说明进行操作时,我得到:

我无法在标准位置安装 CPPPUNIT。(没有root权限,系统团队有“不偏离标准配置”的政策。)

我已经通过在我的 configure.ac 文件中注释掉对 AM_PATH_CPPUNIT 的引用来解决这个问题,但我真正想做的是在我的个人目录中安装 CPPPUNIT 并指向它,但我没有赚太多在弄清楚如何告诉 autoconf/auotmake 系统在非标准位置查找它方面取得了进展。有人对如何做到这一点有任何提示吗?