[英]Passing target name to a dependency in makefile
如果我在makefile中有以下规则:
$(OBJ)/%.o: $(SRC)/%.c
$(CC) -c -o $@ $< $(CFLAGS)
每个匹配前缀./obj/
和./obj/
.o
都会将其传递给%
,因此我可以根据其名称提供一些依赖项。
但是,假设我有这样的规则,我逐一指定我想要的目标:
OBJECTS=abc.o bca.o cba.o
$(OBJECTS): $(SRC)/%.c
$(CC) -c -o $@ $< $(CFLAGS)
如何使%
stem实际上对当前目标名称make有效 ? 只使用%
不起作用,也不是$@
。
请注意,我正在尝试将实际目标名称写入其自己的依赖项。 例如,当make正在执行abc.o
的规则时,它将包括$(SRC)/abc.c
和它(类似于$(patsubst %.o, $(SRC)/%.c, MAGIC_TARGET_NAME_VARIABLE)
) 。
您可以替换此规则:
$(OBJECTS): $(SRC)/%.c
有:
$(OBJECTS) : %.o : $(SRC)/%.c
如果您仍希望在其中构建$(OBJ)
,则需要将$(OBJ)
添加到配方的-o
部分:
$(OBJECTS) : %.o : $(SRC)/%.c
$(CC) -c -o $(OBJ)/$@ $< $(CFLAGS)
我不清楚你在问什么,但我认为这可以完成你想要做的事情:
OBJECTS=abc.o bca.o cba.o
.PHONY: all
all: $(OBJECTS:%=obj/%)
$(OBJ)/%.o: $(SRC)/%.c
echo $(CC) -c -o $@ $< $(CFLAGS)
所有.o
文件都已构建; 每个.o
文件只使用与之对应的.c
文件构建; 如果要在编译.o
文件的命令中引用所有目标文件或源文件的列表,则可以直接引用${OBJECTS}
。
如果这不是您想要做的,您将能够通过列出您拥有的输入文件,您想要输出的文件,每个输出文件的输入依赖项以及编译内容来获得更好的答案。要为每个输出文件执行的命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.