Makefile:一个目标可以有多个单词吗?

5

我想运行我的make任务,使用.. make git pull

.PHONY: What do I put here? git pull ping suggests 3 targets right?

git pull:
    ~/ansible-ctrl/scripts/04-pull-git-latest.sh

ping:
    ~/ansible-ctrl/scripts/06-ping-ansible.sh

有时候,执行“git pull”命令会成功,但是有时候会失败。

在“.PHONY”部分应该填写什么内容?

这种多单词目标的方法有效吗?

如果我使用参数,会出现问题吗?

能否给出一个正确使用这种方法的简单示例(如果有的话)?


3
在你的情况下,你有两个目标:gitpull(尝试使用make gitmake pull)。也许你可以用\space来转义空格字符,但我不知道如何在.PHONY中使用它(转义无效)。为什么不使用git_pull目标或gitpull?这样会更方便 :) - uzsolt
2个回答

6
关于规则语法,GNU make手册写道:

目标是由空格分隔的文件名。

因此,在您的示例中,make会看到两个目标,即gitpull。之前有一个问题涉及在目标中使用空格。然而,答案似乎很笨拙(或根据评论判断甚至不起作用)。
一般来说,GNU make不能很好地处理文件名(因此也包括目标/先决条件)中的空格。这个问题(6年前!)引用一个错误,该错误似乎仍然未解决。
我的建议,就像@uzsolt在评论中指出的那样,去掉空格!

3
如@sycko所指出的,make命令有两个目标,即gitpull,这两个目标是由您提供的操作共同制定的(这种行为有时很有用)。
不过需要指出的是,当您键入make git pull时,它有时会起作用的原因是make将该调用解释为请求同时生成both gitpull目标(这也有时是有用的)。因此,make pull git可能会产生相同的效果。也就是说,它只是偶然起作用。
我不完全确定为什么有时会出现问题,但让make的依赖逻辑混乱并不太难,我对这种结构表现出不可预测的行为并不感到惊讶。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接