【问题标题】:How can I tell autogen.sh to generate files(m4 and object files) in separate folder?如何告诉 autogen.sh 在单独的文件夹中生成文件(m4 和目标文件)?
【发布时间】:2015-03-24 21:00:15
【问题描述】:

我正在使用./autogen.sh --prefix=/usr/ 构建一个c project,并且配置过程(以及后来的编译和链接步骤)创建的所有文件都位于我的源文件夹中。

我想告诉你使用不同的文件夹(比如./build,就像 cmake 项目通常做的那样)。

我该怎么做?

有命令行参数吗?我应该更改文件吗?

注意:autogen.sh 调用gnome-autogen.sh

编辑

尝试cd build && ../autogen.sh --prefix=/usr/ 失败并出现错误:

/usr/bin/gnome-autogen.sh: ./configure: not found

【问题讨论】:

  • 也许mkdir build && cd build && ../autogen.sh ?
  • 感谢您的想法。不幸的是,它不起作用。问题已更新
  • 可以看到autogen的帮助。也许./autogen.sh --help 会起作用。
  • 您是否手动将gnome-autogen.sh 放在autogen.sh 命令行上?你应该吗? (除非您有特定原因,否则使用 --prefix=/usr 是个坏主意,因为它会导致您编译的软件与打包的软件发生冲突。)
  • @Nameiscarl 那么/usr/bin/gnome-autogen.sh 在上面的命令行中做了什么?错字?在运行autogen.sh 之前,您可以尝试将NOCONFIGURE 环境变量设置为非空值,以防止gnome-autogen.sh 自动运行它。那应该可以让您事后正确地手动运行它。

标签: c unix makefile autotools


【解决方案1】:

据我所知,这是不可能的。 autogen是一头奇怪的野兽;它创建的文件是构建项目所必需的(configureMakefile.am)。

这意味着autogen 比“将源代码编译成产品”步骤更多地是“解压缩源代码”的一部分。运行 autogen 后,您可以在构建目录中运行 configure 以获取驱动构建所需的所有文件的版本(config.hMakefile,...),用于您的特定架构:

./autogen.sh
mkdir build
../configure --prefix=/usr

参见文件INSTALL中的Compiling For Multiple Architectures

【讨论】:

  • 它们是构建文件所必需的......所有这些都应保留正确的相对路径/等。在构建目录中甚至以这种方式完成。我相信这应该适用于正确编写的autogen.sh 脚本。在线快速搜索会发现许多项目在其autogen.sh 脚本中修复问题以处理此案例。
  • 出于某种原因,运行 ./autogen.sh 也会运行 ./configure。是否与项目附带的脚本有关?
  • 在我的副本中,它尝试运行$srcdir/configure。试试cd build ; srcdir=.. ../autogen.sh。这个奇怪的语法定义了变量srcdir,将..(=父文件夹)分配给它,然后运行../autogen.sh
  • 还有一个NOCONFIGURE 变量,您可以将其设置为任何内容以跳过配置过程。之后,您可以按照我的回答自己运行脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 2013-05-16
  • 1970-01-01
  • 2016-11-15
  • 2021-11-24
  • 1970-01-01
  • 2019-02-13
相关资源
最近更新 更多