我可以添加目标文件作为依赖项吗?
Can I add object files as dependency?
我有多个电源的 makefile
info ::
@echo "make main1/2/3"
PROGS = main1 main2 main3
.SECONDEXPANSION:
${PROGS} :: $$@.o
${CC} -o $@ $^
但是一个(而且只有一个)main 需要另一个对象 linked in。我试着用
解决这个问题
main3 :: lib.o
但不知何故 lib.o
未添加到先决条件列表中。
link 行的顺序有所不同。
- 我在
PROGS
link 行之后添加 main3
行,然后由于缺少目标文件而导致炸弹爆炸。
- 如果我将它添加到 before
PROGS
行,那么自定义行首先使用我不想要的默认规则执行,然后PROGS
规则无论如何都会被执行,它会爆炸。
有没有办法对对象 linking 使用 $^
等宏?我当然可以从 PROGS
宏中分离出 main3,但该宏也用于许多其他目的。
您在似乎不需要双冒号的情况下使用了双冒号规则。来自 the manual:
Double-colon rules with the same target are in fact completely separate from one another. Each double-colon rule is processed individually, just as rules with different targets are processed.
如果您希望针对同一目标的不同规则 合并 (正如您似乎想要 main3
),只需切换到普通(单冒号)规则:
.SECONDEXPANSION:
${PROGS} : $$@.o
${CC} -o $@ $^
main3 : lib.o
您可以通过将 ${PROGS}
规则变成 static pattern rule:
来简化您的规则
${PROGS} : % : %.o
${CC} -o $@ $^
我有多个电源的 makefile
info ::
@echo "make main1/2/3"
PROGS = main1 main2 main3
.SECONDEXPANSION:
${PROGS} :: $$@.o
${CC} -o $@ $^
但是一个(而且只有一个)main 需要另一个对象 linked in。我试着用
解决这个问题main3 :: lib.o
但不知何故 lib.o
未添加到先决条件列表中。
link 行的顺序有所不同。
- 我在
PROGS
link 行之后添加main3
行,然后由于缺少目标文件而导致炸弹爆炸。 - 如果我将它添加到 before
PROGS
行,那么自定义行首先使用我不想要的默认规则执行,然后PROGS
规则无论如何都会被执行,它会爆炸。
有没有办法对对象 linking 使用 $^
等宏?我当然可以从 PROGS
宏中分离出 main3,但该宏也用于许多其他目的。
您在似乎不需要双冒号的情况下使用了双冒号规则。来自 the manual:
Double-colon rules with the same target are in fact completely separate from one another. Each double-colon rule is processed individually, just as rules with different targets are processed.
如果您希望针对同一目标的不同规则 合并 (正如您似乎想要 main3
),只需切换到普通(单冒号)规则:
.SECONDEXPANSION:
${PROGS} : $$@.o
${CC} -o $@ $^
main3 : lib.o
您可以通过将 ${PROGS}
规则变成 static pattern rule:
${PROGS} : % : %.o
${CC} -o $@ $^