Make 未找到添加到 Makefile 中 PATH 的可执行文件

问题描述 投票:0回答:1

我遇到了

make
和 PATH 的问题,我不明白。这是一个独立的演示,其中
make
意外失败:

#!/bin/bash
if [ -d ~/makeTest ]; then 
    rm -r ~/makeTest ;
fi
mkdir ~/makeTest
cd ~/makeTest
mkdir bin
echo "#!/bin/bash
echo Hello world!" > bin/install.sh
chmod +x bin/install.sh

echo ".PHONY: install

export PATH := \$(HOME)/makeTest/bin:\$(PATH)

install:
    @which install.sh
    @install.sh" > Makefile

make install

(在 GitHub 上查看。)

总而言之,此脚本会生成一个

bin
文件夹,其中包含
install.sh
脚本和包含以下内容的 Makefile:

.PHONY: install

export PATH = $(HOME)/makeTest/bin:$(PATH)

install:
    @which install.sh
    @install.sh

make install
产生输出:

/Users/Suriname0/makeTest/bin/install.sh
make: install.sh: No such file or directory
make: *** [install] Error 1

为什么

which
可以正确地看到 PATH 上的 install.sh 脚本,但实际执行命令却失败并显示“没有这样的文件或目录”?验证 PATH 是否正确更新很容易:添加
@echo $(PATH)
会生成预期的(更新后的)PATH。

感谢您帮助理解此 PATH 问题!

可能与其他奇怪的路径问题有关。在 Mac 操作系统上。

bash makefile gnu-make
1个回答
0
投票

我的猜测是您对路径所做的更改不会影响 shell。为了解决这个问题,我提出了一些更改:

#1 间接制作

.PHONY: install install2

export PATH := $(HOME)/makeTest/bin:$(PATH)

install:
    which install.sh
    $(MAKE) install2

install2:
    install.sh

我不喜欢这种方法,因为它具有间接性。

#2 指定相对路径

.PHONY: install

install:
    ./bin/install.sh

这是我在开发团队工作多年中看到的解决方案。我喜欢这个解决方案,因为它不会篡改路径,否则可能会导致不良行为。

#3 修改shell中的路径

.PHONY: install

install:
    export PATH="${PWD}/bin:${PATH}"; \
    install.sh

这个方法也有效。但同样,我不喜欢它,因为它篡改了解决方案 #1 中的路径。但是,如果 bin 目录包含许多可执行文件,则此解决方案比解决方案 #2 效果更好。

© www.soinside.com 2019 - 2024. All rights reserved.