【问题标题】:Unable to run configure file if not in the same directory如果不在同一目录中,则无法运行配置文件
【发布时间】:2018-08-31 21:19:07
【问题描述】:

我无法运行手动 tar.gz 包安装的配置文件。例如,解压缩文件后,我运行

$ sudo ./vim81/configure
[sudo] password for cli2:
./vim81/configure: line 6: cd: src: No such file or directory

但是,如果我在配置文件所在的目录中,我可以运行配置文件。

$ ./configure
configure: loading cache auto/config.cache
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
...

我的问题是,如果我和源文件不在同一个目录下,如何执行配置文件?

我知道我可以使用yumapt-get 来安装vim,但这只是一个示例包,我想为任何包手动执行此操作。谢谢。

【问题讨论】:

  • 您不应该使用sudo 构建。如果需要,仅将其用于install。您应该执行./configure && make && sudo make install。我不相信 Autotools 允许在树外构建。您必须从configure 所在的目录运行它。 (也许较新的 Autotools 有所不同)。
  • 你为什么不想先cd 到目录?
  • 所以在你的子进程中,做一个cd。没有?
  • @cli2 如果您不知道包含configure 脚本的目录,则无法完成此任务。您的问题需要了解此目录,无论这意味着做出假设还是使用通配符。此外,正如 jww 所解释的那样,您应该只在 make install 期间需要 sudo
  • @jww,默认情况下,Automake 确实提供了源外构建,但它不是免费的:如果他们不小心,项目维护人员可以编写 Makefile.am 文件,这些文件会中断-源构建。此外,如果作为项目维护者,您在没有 Automake 的情况下使用 Autoconf,那么您将自己获得任何源外构建支持。

标签: linux installation autotools configure autoconf


【解决方案1】:

我知道我可以使用yumapt-get 来安装vim,但这只是一个示例包,我想为任何包手动执行此操作。

从源代码构建没有万无一失的通用配方,即使您将范围限制为仅基于 Autotools 的软件包(显然 Vim 不是,确切地说)。这就是软件打包、包存储库和包管理器如此普及的原因之一。

作为一个进行过大量打包构建的人,我向您保证,当我遇到一个可以通过相当于直接configure; make; make install 打包的项目时,这是一种难得的快乐。当我遇到一个时,它使我的一天。其余时间,我必须在每个包的基础上找出任意数量的构建细节,例如

  • 正在使用哪个配置/构建系统,如果有
    • Autotools / CMake / Python setuptools / etc.
    • 这会影响所需的构建/安装命令,以及诸如可以/应该用于构建的工作目录等详细信息
  • 哪些配置选项需要或适合目标机器,以及如何将它们表达到构建系统
    • 可以是configure 脚本的选项、make 的参数、Makefile 的手动调整、交互式问卷的答案……
  • 需要哪些依赖项、哪些版本以及如果我还没有这些依赖项,如何获取它们
  • 有时,如何清理安装后,例如,
    • 删除我不想安装的文件
    • 将文件移动到错误的位置(尽管最好使用构建配置)
    • 修复文件权限或所有权
  • 有时,额外的安装任务,例如
    • 添加外壳配置文件
    • 创建符号链接
    • 使用系统的服务控制子系统注册服务
    • 安装动态链接器配置文件

所有这些至少同样适用于手动构建。如果您不依赖其他人来执行此操作(通过使用其他人构建的包),那么您需要准备好自己做您构建的每个项目所需的尽可能多的事情.没有办法从那个起点自动化它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 2021-08-16
    • 2017-03-09
    相关资源
    最近更新 更多