其他命令在 make 文件中不起作用

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

我有这个 make 文件来检查文件是否存在于文件夹中。如果不是,它应该使用 curl 命令从 JFrog artifactory 下载该文件。如果文件存在那么它不应该做任何事情。

si_file := ms_auix
extract_path := C:\si
si_url := https://artifact.com/artifactory/aksi/SI/$(si_file).zip

.PHONY: download-si
download-si:
    @echo "Checking for $(si_file) in $(extract_path)..."
    @if not exist "$(extract_path)\$(si_file)" (
        echo "Downloading $(si_file) from Artifactory...";
        curl -u te14:cmVXluNkVJ -O "$(si_url)";
    ) else (
        echo "$(si_file) already exists in $(extract_path).";
    )

当我运行这段代码时,包是从 artifactory 下载的,但代码仍然运行 else 循环,我在终端中得到了这个

) else (
process_begin: CreateProcess(NULL, ) else (, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [Makefile:11: download-si] Error 2

if 循环工作正常,但为什么它无论如何都执行 else 循环。有人可以在这里指导我代码有什么问题吗?

if-statement curl makefile artifactory
1个回答
0
投票

对于多行命令,您需要转义换行符:

    @if not exist "$(extract_path)\$(si_file)" ( \
        echo "Downloading $(si_file) from Artifactory..."; \
        curl -u te14:cmVXluNkVJ -O "$(si_url)"; \
    ) else ( \
        echo "$(si_file) already exists in $(extract_path)."; \
    )

这里可能的罪魁祸首是检查文件是否存在时缺少 .zip 文件结尾。


如果使用 GNU Make,你可以使用 order-only 依赖来创建不存在的文件:

download-si: | $(extract_path)\\$(si_file)

$(extract_path)\\$(si_file):
    echo "Downloading $(si_file) from Artifactory...";
    curl -u te14:cmVXluNkVJ -O "$(si_url)";

我可能会重新使用自动变量以及目标特定变量来将文件与 URL 相关联,而不是像那样替换全局变量。留给读者作为练习。

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