我可以添加目标文件作为依赖项吗?

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 行的顺序有所不同。

有没有办法对对象 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 $@ $^