我正在尝试编译一个 gnome 应用程序,我很好奇运行autogen.sh
脚本时输出的含义:
~/Documents/Code/window-picker-applet $./autogen.sh
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --install --copy
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
autoreconf: running: /usr/bin/autoconf
autoreconf: running: /usr/bin/autoheader
autoreconf: running: automake --add-missing --copy --no-force
data/Makefile.am:11: `%'-style pattern rules are a GNU make extension
data/Makefile.am:11: wildcard $(top_srcdir: non-POSIX variable name
data/Makefile.am:11: (probably a GNU make extension)
autoreconf: Leaving directory `.'
[Output trunkated...]
Run Code Online (Sandbox Code Playgroud)
为什么我会得到信息configure.ac: not using Gettext …
我想知道在 BSD 中构建软件的首选方式是什么,以及他们是否积极使用和鼓励使用 GNU 自动工具。
我在OpenBSD 手册中找到了有关 GNU autoconf 的以下部分:
autoconf 是一个 gnu 工具,旨在帮助编写可移植程序。它通常与 automake(便携式 makefile)和 libtool(便携式共享库)一起使用。
这些工具不能很好地工作,并且在将软件移植到 OpenBSD 时经常会产生特定的挑战。
这似乎不是很令人鼓舞。OpenBSD 有自己的类似自动工具的程序吗?你应该自己编写配置脚本吗?我看到例如 OpenSSH正在使用 autoconf。
FreeBSD 在它的手册中有一个中性部分,但它仍然在“特殊注意事项”部分:
各种 GNU 自动工具提供了一种抽象机制,用于在各种操作系统和机器架构上构建软件。[...]
我正在处理一个具有自定义INSTALL
文件的项目。运行automake --add-missing
(或更准确地说,autoreconf -i
)将生成 GNU 默认INSTALL
文件,并用它覆盖我们的文件。
我怎样才能防止这种行为?我希望它要么根本不生成 GNUINSTALL
文件,要么用不同的名称创建它。
另外,我不想禁用automake
可能生成的任何其他文件。
编辑1:从automake
手册:
如果
--add-missing
给出该选项,automake
将添加INSTALL
文件的通用版本以及COPYING
包含当前版本的 GNU 通用公共许可证 [...] 文本的文件。但是,现有COPYING
文件永远不会被automake
.
它说现有COPYING
文件不会被覆盖,但没有说明该INSTALL
文件的任何内容,因此它似乎会被无条件覆盖。
编辑 2:根据要求,这是我的configure.ac
和Makefile.am
,以及autogen.sh
我们运行到autoreconf
项目的内容:
configure.ac
:
AC_INIT([program name], [version number], [bug report], [short name], [url])
AC_CONFIG_SRCDIR([Main/Source/main.cpp])
AM_PROG_AS
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_PROG_CXX
CFLAGS="$CFLAGS $SDL_CFLAGS "
LIBS="$LIBS $SDL_LIBS" …
Run Code Online (Sandbox Code Playgroud) 编译并安装 GNU automake 1.15 后,每当我运行 automake 时都会出现此错误:
Unescaped left brace in regex is deprecated, passed through in regex;
marked by <-- HERE in m/\${ <-- HERE ([^ \t=:+{}]+)}/
at /usr/local/bin/automake line 3936
Run Code Online (Sandbox Code Playgroud)
我正在运行 perl v5.22.0。
rtnet 的源文件夹仅包含上述用于编译目的的文件。其余文件是示例的源代码。
问题是这些文件是否表明它们是通过 automake 生成的?
如果是,那么我应该在哪里查找配置 automake 以生成这些文件的设置?
我正在尝试使用./configure
.
我有
三个包含目录
-I/path1/include
-I/path2/include
-I/path3/include
Run Code Online (Sandbox Code Playgroud)
两个链接目录
-L/path1/lib
-L/path2/lib
Run Code Online (Sandbox Code Playgroud)
两个-l
标志选项
-ltensorflow
-lasan
Run Code Online (Sandbox Code Playgroud)
两个编译标志
-O3
-g
Run Code Online (Sandbox Code Playgroud)
我怎样才能有效地将所有这些标志作为选项放入./configure
?
我试图从我的 Ubuntu 机器中删除 Perl,但发现它automake
不仅依赖于 Perl,而且它本身就是一个 Perl 程序。我在某处读到过,情况并非总是如此。
今天我查看了档案,但即使是 1.0 版也已经在 Perl 中了。我是误读了,还是automake
一直在使用 Perl?
是否有任何不依赖于 Perl 的替代品?
当我运行sudo make install
来自 GNU 存档的编译包时,它用于mkdir -p
创建目标目录。
我更喜欢使用它mkdir -p -m 0755
或install -d -m 0755
以确保目标目录在所有情况下对每个人都具有适当的权限,而不仅仅是当 root 的 umask 是 0022 时(这对我来说不是这样)。
该软件包正在使用 autoconf/automake,它的行为似乎是由名为AC_PROG_MKDIR_P
.
目前我可以sudo chmod 0755
在我知道权限错误的目录上运行。但这显然不是正确的选择。
我会避免研究整个文档以实现“仅此而已”。
任何提示?