Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如果不在同一目录中,则无法运行配置文件_Linux_Installation_Autotools_Configure_Autoconf - Fatal编程技术网

Linux 如果不在同一目录中,则无法运行配置文件

Linux 如果不在同一目录中,则无法运行配置文件,linux,installation,autotools,configure,autoconf,Linux,Installation,Autotools,Configure,Autoconf,我无法运行手动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 wheth

我无法运行手动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
...
我的问题是,如果我与源文件不在同一目录下,如何执行配置文件

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

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

从源代码构建没有可靠的fire通用方法,即使您将范围限制为仅基于Autotools的包(显然Vim不是)。这就是为什么软件打包、包存储库和包管理器变得如此广泛的原因之一

作为一个执行了大量包构建的人,我向您保证,当我遇到一个项目时,我可以通过相当于一个简单的
配置来打包,这是一种难得的乐趣;制作进行安装
。当我遇到一个,它使我的一天。剩下的时间,我必须在每个包的基础上找出任意数量的构建细节,例如

  • 正在使用哪个配置/生成系统(如果有)
    • Autotools/CMake/Python设置工具等
    • 这会影响所需的构建/安装命令,以及构建可以/应该使用的工作目录等详细信息
  • 目标计算机需要或适合哪些配置选项,以及如何向生成系统表达这些选项
    • 可以是
      配置
      脚本的选项、
      生成
      的参数、
      生成文件
      的手动调整、交互式问卷的答案
  • 需要什么依赖项,在什么版本,如果我还没有依赖项,如何获取依赖项
  • 有时,如何清理安装后,例如,
    • 删除我不想安装的文件
    • 移动到错误位置的文件(尽管使用了最佳的生成配置)
    • 修复文件权限或所有权的步骤
  • 有时,还需要执行其他安装任务,例如
    • 添加shell配置文件
    • 创建符号链接
    • 使用系统的服务控制子系统注册服务
    • 安装动态链接器配置文件

所有这些至少也同样适用于手动构建。如果您不依赖其他人来完成这项工作(即使用其他人构建的包),那么您需要准备好自己完成您构建的每个项目所需的所有这些工作。没有办法从这个起点将其自动化。

您不应该使用
sudo
构建。仅在需要时将其用于
安装
。您应该执行
/configure&&make&&sudomake安装
。我不相信自动工具允许在树上建房。您必须从
configure
所在的目录运行它。(可能较新的自动工具不同)。为什么不先将
cd
转到dir?因此,在子流程中,执行
cd
。否?@cli2如果您不知道包含
configure
脚本的目录,则无法完成此任务。您的问题需要了解此目录,无论这意味着进行假设还是使用通配符。另外,正如jww所解释的,在
makeinstall
过程中,您应该只需要
sudo
。@jww,Automake在默认情况下绝对提供源代码外构建,但它不是免费的:如果他们不小心,项目维护人员可以编写源代码外构建的Makefile.am文件。另外,如果作为项目维护者,您使用Autoconf而不使用Automake,那么您自己就可以获得任何源代码外的构建支持。