make install 找不到aclocal

make install can't find aclocal

我正在尝试在超级计算机上将代码并行编译为 运行。我知道其他人已经在同一台计算机上将此代码编译为 运行,但出于某种原因,即使使用与他们相同的方法,我也遇到了麻烦。现在我只是尝试将代码串行编译为 运行,因为这样应该更容易排除故障。

configure 似乎工作正常。 然而 make install returns 以下内容:

> make install

    CDPATH="${ZSH_VERSION+.}:" && cd .. && /bin/sh /home1/username123/code123/config/missing aclocal-1.13 -I ./config -I /home1/username123/code123/build-tools/aclocal -I /usr/local/share/aclocal
    aclocal-1.13: error: couldn't open directory '/usr/local/share/aclocal': No such file or directory
    Makefile:534: recipe for target '../aclocal.m4' failed
    make: *** [../aclocal.m4] Error 1

aclocal 确实不在 /usr/local/share/aclocal,它位于 /usr/bin/aclocal - 但是 /usr/bin 在我的路径中,我不明白为什么这个位置是个问题.

正如在对该问题的评论中明确指出的那样,问题在于项目源以未能保留其原始时间戳的方式复制到目标系统。 Autotools 通过 make 使用文件时间戳来确定哪些文件已过时,特别是 Autools 生成的 Makefiles 包含重建构建系统本身的规则以这种方式触发。

通常不需要或不希望重建 Autotools 项目的构建系统,除非结合对其进行实际维护。事实上,通常情况下当地无法提供必要的支持。为避免构建系统认为它需要重建自身,从分发存档中保留文件时间戳很重要。对于某些包,它也可以将 --disable-maintainer-mode 参数传递给 configure 脚本,但绝不是所有 Autotools configure 脚本都支持它。

用于分发基于 Autotools 的包的典型存档格式的存档提取工具默认情况下会在解包时保留时间戳,因此

的普通过程
  1. 在目标系统上解压存档(例如 tar xzf foo-1.2.3.tar.gz
  2. 更改为解压缩的源目录(例如 cd foo-1.2.3
  3. configure; make; make install

通常做正确的事。然而,用其他东西代替 (1),例如从其他地方复制解压的源代码树,可能会导致包认为它需要重建构建系统。如果它工作正常,那没什么大不了的,但它不工作的情况并不少见。这就是这里发生的情况,按照上述标准程序解决了问题。