如何告诉 autogen.sh 在单独的文件夹中生成文件(m4和目标文件)?

3
我正在使用 ./autogen.sh --prefix=/usr/ 来构建一个C语言项目,配置过程(以及后续的编译和链接步骤)创建的所有文件都位于我的源文件夹中。
我想告诉它使用不同的文件夹(比如像cmake项目通常做的那样使用./build)。
我该怎么做?
有命令行参数吗?还是我需要更改一个文件?
引用:
注意: autogen.sh 调用了 gnome-autogen.sh 编辑:
尝试cd build && ../autogen.sh --prefix=/usr/ 失败并显示以下错误:
/usr/bin/gnome-autogen.sh: ./configure: not found

谢谢你的想法。不幸的是它并不起作用。问题已更新。 - Name is carl
你是手动将 gnome-autogen.sh 放在 autogen.sh 命令行中吗?你应该这样做吗?(除非你有特定的原因,否则使用 --prefix=/usr 是一个坏主意,因为它会导致你编译的软件与打包的软件发生冲突。) - Etan Reisner
有趣的是,使用“--help”启动配置过程会创建一堆文件,但并未提供我正在寻找的选项。 - Name is carl
@EtanReisner,不,我只是启动了项目提供的autogen.sh脚本(在问题中提供的链接)。至于前缀,我注意到有时候不设置它会在测试编译后的应用程序时出现问题。目前冲突不是主要问题(但我很乐意听取良好实践的建议)。 - Name is carl
1
@Nameiscarl,那么在上面的命令行中/usr/bin/gnome-autogen.sh是做什么的呢?打错了吗?在运行autogen.sh之前,您可以尝试将NOCONFIGURE环境变量设置为非空值,以尝试防止gnome-autogen.sh自动运行它。这样应该可以让您正确地手动运行它。 - Etan Reisner
显示剩余6条评论
1个回答

3
据我所知,这是不可能的。 autogen 是一个奇怪的东西;它创建的文件对于构建项目(configureMakefile.am)是必要的。
这意味着 autogen 更多地属于“解压源代码”而不是“将源代码编译成产品”的步骤。在运行了 autogen 之后,您可以在构建目录中运行 configure 来获取所有文件的版本,这些文件对于驱动构建(config.hMakefile 等)适用于您的特定架构:
./autogen.sh
mkdir build
../configure --prefix=/usr

请参见文件INSTALL中的为多个体系结构编译部分。

它们对于构建文件是必要的...所有这些文件应该在构建目录中保留正确的相对路径等,即使以这种方式完成。我相信这应该可以与正确编写的autogen.sh脚本一起使用。通过快速在线搜索,可以找到许多项目修复其autogen.sh脚本以处理此情况。 - Etan Reisner
由于某种原因,运行 ./autogen.sh 也会运行 ./configure。这是否与项目附带的脚本有关? - Name is carl
在我的副本中,它尝试运行$srcdir/configure。请尝试cd build; srcdir=.. ../autogen.sh。这种奇怪的语法定义了变量srcdir,将..(=父文件夹)分配给它,然后运行../autogen.sh - Aaron Digulla
还有一个NOCONFIGURE变量,您可以将其设置为任何值以跳过配置过程。之后,您可以像我的答案中那样自己运行脚本。 - Aaron Digulla
这个NOCONFIGURE变量似乎在许多软件包中都很常见,它的使用有没有被记录在哪里? - lanoxx
@lanoxx,我刚看到了这个功能请求 https://github.com/firewalld/firewalld/issues/227,然后看到了添加该功能的提交,只更改了autogen.sh而没有更改文档:https://github.com/firewalld/firewalld/commit/11f0f5b8b781b890821d8940139e0cc2aa7e271f - Aaron Digulla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接