将命令行参数作为 Makefile 中的目标传递
为了简化我的问题,如果我有一个如下的 Makefile,
%: %.c
gcc -o $@ $<
make foo
Make foo
将从 foo.c
构建可执行文件 foo
。没有问题。如果我要按如下方式更改 Makefile,以便可以从 Makefile 命令行传递目标,
# To make things little complex
TARG=$(EXE)
$(TARG): %.c
gcc -o $@ $<
make EXE=foo
上面的命令 make EXE=foo
表示:
"make: *** 没有规则可以创建目标 %.c,
foo' 需要。停止。`
为什么 $(TARG)
不是 在 Makefile 的 target
规则中得到扩展?
To simplify my question, if I have a Makefile as below
%: %.c
gcc -o $@ lt;
make foo
Make foo
will build the executable foo
from foo.c
. No issues. If I were to change the Makefile as below, so that I can pass the target from Makefile command-line
# To make things little complex
TARG=$(EXE)
$(TARG): %.c
gcc -o $@ lt;
make EXE=foo
The above command make EXE=foo
says:
"make: *** No rule to make target %.c, needed by
foo'. Stop.`
Why is $(TARG)
not getting expanded in the target
rule in Makefile?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为你需要 静态模式规则
I think you need Static Pattern rule
只需保留第一个示例中的代码并添加以下行:
或者(实际上是相同的)在任何其他规则之前添加不带配方的
$(EXE) :
规则。默认情况下,如果命令行上未指定任何内容,Make 将选择 Makefile 中定义的第一个目标。Just leave the code from your first example and add the following line:
Or (which is effectively the same) add
$(EXE) :
rule with no recipe before any other rules. By default Make picks the first target defined in the Makefile, if nothing is specified on the command line.