Makefile 和子 makefile,虚假任务无需执行任何操作

发布于 2025-01-05 10:32:17 字数 556 浏览 1 评论 0原文

目录树

.
| Makefile
| src
    | Makefile
| spec
| test

./Makefile 中的

default: all

.DEFAULT: 
    $(MAKE) -C $@

src/Makefile 中的

.PHONY: all spec test ...

spec:
    bundle exec cucumber ../spec

当我在 src 目录中时,“make spec”运行良好。

..././src/# make spec
blablabla

但是当我在根目录中时,我发现“没有什么可做的”,但它是一个虚假目标

..././# make spec
make: Nothing to be done for `spec'.

,我认为这是任务名称的问题,该任务名称与目录名称相同,带有子目录生成文件。

Directory tree

.
| Makefile
| src
    | Makefile
| spec
| test

in ./Makefile

default: all

.DEFAULT: 
    $(MAKE) -C $@

in src/Makefile

.PHONY: all spec test ...

spec:
    bundle exec cucumber ../spec

When I am in the src directory the "make spec" works well.

..././src/# make spec
blablabla

But when I am in the root directory i get that there is "nothing to be done" but it is a phony target

..././# make spec
make: Nothing to be done for `spec'.

I suppose it is a problem with the name of task that is the same as the name of the directory, with a sub makefile.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

流年里的时光 2025-01-12 10:32:17

我认为这是任务名称与目录名称相同且带有子 makefile 的问题。

是的。

尝试如下操作:

all :

forward_ : ;

% : forward_
    $(MAKE) -C $@

.PHONY : all forward_

即使存在带有 $@ 的现有文件或目录,Phony forward_ 目标也应该触发 % 目标的重新评估姓名。

I suppose it is a problem with the name of task that is the same as the name of the directory, with a sub makefile.

Yep.

Try something like:

all :

forward_ : ;

% : forward_
    $(MAKE) -C $@

.PHONY : all forward_

Phony forward_ target is supposed to trigger re-evaluation of % target even when there is an existing file or directory with $@ name.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文