编译时,我总是将构建放在一个单独的目录中。例如:
mkdir build
cd ./build
(cd ..; ./bootstrap)
../configure
make
因为我有足够的 RAM,所以我的目标是在 TMPFS 上编译。
脚本获取项目的名称,将其用作在 $XDG_RUNTIME_DIR/build
中创建的目录的名称,最后链接它。
# setup-build.sh
#!/usr/bin/bash
set -e
my_project_name=$(basename $(pwd))
my_project_build_dir="$XDG_RUNTIME_DIR/build/$my_project_name"
mkdir -p $my_project_build_dir
ln -s "$my_project_build_dir" "$(pwd)/build"
脚本运行没有问题。但是,当我执行 cd ./build; 时../configure
它返回一个错误:bash: ../configure: No such file or directory
。该文件肯定存在,但 Bash 找不到它!
最佳答案
我将脚本修改为:
#!/usr/bin/bash
set -e
my_project_src_dir="$(pwd)"
my_project_name="$(basename $(pwd))"
my_project_build_dir="$XDG_RUNTIME_DIR/build/$my_project_name"
mkdir -p "$my_project_build_dir"
ln -s "$my_project_build_dir" "$(pwd)/build"
cd "$my_project_build_dir"
echo "$my_project_src_dir" > "./project-src-dir.txt"
要编译我必须输入cd ./build; $(cat ./project-src-dir.txt)/配置;制作
。不过,这会导致 Bash 完全中断或部分中断。正如我无法使用此方法从 $my_project_src_dir
中 TAB 完整文件名一样,但参数的 TAB 完成工作正常。如果需要autoconf
:(cd $(cat ./project-src-dir.txt); ./bootstrap)
。如果有人有任何其他想法,我仍然希望能够只执行 ../configure
,尽管现在必须这样做。
编辑:必须将 my_project_name="$(basename '$my_project_src_dir')
更改为 my_project_name="$(basename $(pwd))"
因为它从字面上理解了 '$my_project_src_dir'
。
关于linux - "No such file or directory"在链接路径中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57225105/