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

能否将client_win自身纳入Makefile的$(addprefix)函数调用中?

当然可以!而且有更简洁的实现方式

你完全可以把client_win本身融入$(addprefix)的调用里,根本不需要用NOTHING这种占位符——直接用空字符串作为$(addprefix)第二个参数的第一个元素就行。

具体写法

把原来的:

$(addsuffix .exe,client_win $(addprefix client_win, _throttle _freq ))

改成:

$(addsuffix .exe, $(addprefix client_win, '' _throttle _freq))

原理说明

$(addprefix PREFIX, WORDS)函数的作用是给WORDS列表里的每个单词都加上PREFIX前缀:

  • 当WORDS里第一个元素是空字符串('')时,client_win + 空字符串就得到client_win,正好是你要的基础目标;
  • 后面的_throttle和_freq加上前缀后,就变成client_win_throttle和client_win_freq,完美覆盖所有三个需要的目标。

另一种更直观的写法(可选)

如果你觉得写''有点别扭,可以先定义一个空变量:

empty :=
TARGETS := $(addsuffix .exe, $(addprefix client_win, $(empty) _throttle _freq))

展开后的结果和上面完全一致,都是client_win.exe client_win_throttle.exe client_win_freq.exe。

额外小提示

其实如果你是在Makefile的shell命令中(比如echo或者编译命令里),也可以直接用Bash的大括号扩展,和你平时在终端里写的一样:

print_targets:
    @echo client_win{,_throttle,_freq}.exe

但如果是用来定义Make的编译目标列表,用Make自带的函数会更符合Makefile的语法规范,也能避免依赖shell的特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:02:43