gpt4 book ai didi

c - makefile 目标中的两个变量

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:13 27 4
gpt4 key购买 nike

我想指定一个包含多个自动变量的 makefile 目标,但我不知道该怎么做。

例如:

build/%_$(MPU).o: %.c
${MP_CC} $< -o $@ -c -mcpu=$(MPU) $(CFLAGS)

这里的想法是从单个源文件创建许多目标文件(每个微 Controller 架构一个)。例如,如果我的源文件是 BinarySearch.c,我想制作

build/BinarySearch_33FJ128MC710A.o
build/BinarySearch_33FJ128MC706A.o
etc.

遗憾的是,我只能匹配源文件名“BinarySearch”,无法匹配 MPU 名称。也许另一种写下我的意图的方式是

 build/%1_%2.o: %1.c
${MP_CC} $< -o $@ -c -mcpu=%2 $(CFLAGS)

其中 %1 与源文件名匹配,%2 与 MPU 名称匹配。当然,make 语法实际上并不是这样工作的;我只是想表达我的愿望。

很可能我在这里采取了错误的方法,但我不确定我应该使用哪个 make 功能来实现这个目标。任何帮助将不胜感激。

最佳答案

你写的差不多了。但是,make 无法从源文件名计算出您正在编译的 CPU。只需告诉 make 您想要的 CPU。

Makefile(如上):

build/%_$(MPU).o: %.c
${MP_CC} $< -o $@ -c -mcpu=$(MPU) $(CFLAGS)

命令行:

$ make build/BinarySearch_33FJ128MC710A.o MPU=33FJ128MC710A

如果在同一命令行中两次提及 33FJ128MC710A 对您来说过于繁重,您可以使用二次扩展来获得您想要的效果。请注意,这仅适用于先决条件,因此您需要稍微重新设计您的模式。

.SECONDEXPANSION:

build/%.o: $$(firstword $$(subst _, ,$$*_)).c
${MP_CC} $< -o $@ -c -mcpu=$(lastword $(subst _, ,$*)) $(CFLAGS)

现在你只需要

$ make build/BinarySearch_33FJ128MC710A.o

在命令行上(配方中的 $* 匹配依赖行中匹配的任何 %,这通常非常方便)。

关于c - makefile 目标中的两个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23250049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com