You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Makefile规则匹配所有目标(含.PHONY目标)?

解决Makefile捕获所有目标(含.PHONY目标)的问题

问题原因

当你声明.PHONY: x但未为x定义任何命令时,make会判定这个伪目标已处于最新状态,不会触发任何隐含规则(包括你写的%模式规则),因此输出make: Nothing to be done for 'x'。

解决方案

方案1:为单个伪目标添加明确规则

如果伪目标数量较少,直接为每个伪目标编写规则,指定执行逻辑:

.PHONY: x __dummy__

# 设置无参数make的默认目标
.DEFAULT_GOAL := __dummy__

__dummy__:
    @echo No targets rule

# 为伪目标x定义执行逻辑
x:
    @echo Default rule

# 捕获所有其他未明确定义的目标
%:
    @echo Default rule

方案2:用FORCE目标实现通用捕获(推荐)

如果需要处理大量伪目标或不确定目标列表,通过FORCE伪目标强制所有规则重新执行,确保所有目标(含伪目标)都触发自定义逻辑:

.PHONY: x __dummy__ FORCE

# 设置无参数make的默认目标
.DEFAULT_GOAL := __dummy__

__dummy__: FORCE
    @echo No targets rule

# 捕获所有指定目标(包括伪目标和普通目标)
%: FORCE
    @echo Processing target: $@
    # 此处添加转发到其他目录Makefile的逻辑,示例:
    # $(MAKE) -C ../your-target-dir $@

# FORCE目标仅用于触发重新执行,无需命令
FORCE:

测试效果

  • 无参数调用make:输出No targets rule
  • 调用make y:输出Processing target: y
  • 调用make x:输出Processing target: x,符合预期。

内容的提问来源于stack exchange,提问作者Klaus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:03:14