繁体   English   中英

将目标名称传递给makefile中的依赖项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM