使用 `$<` 制定规则,仅将一个对象添加到存档库
Make rule using `$<` only adding one object to archive library
我觉得很蠢,但我自己找不到解决办法:
我有一个 Makefile
可以从 C 源代码正确构建对象,我想将 $(OBJECTS)
放在存档库中。
我正在使用 GNU Make 4.0.
x.a: $(OBJECTS)
echo "$< ($(OBJECTS))"
$(AR) $(ARFLAGS) $@ $<
(原始行用 TAB 缩进。回显仅用于调试目的,$(AR) $(ARFLAGS) $@ $<
复制自 make
的内部规则)
进行输出(在对象构建完成后):
echo "log_thread/log_thread.o (log_thread/log_thread.o log_thread/thread.o)"
log_thread/log_thread.o (log_thread/log_thread.o log_thread/thread.o)
ar rv x.a log_thread/log_thread.o
ar: creating x.a
a - log_thread/log_thread.o
所以我希望两个对象模块都添加到库 x.a
,但是 $<
只包含一个对象模块,而不是 $(OBJECTS)
)。
我的Make知识可能有点生疏,也许这就是我不明白的原因。
当然,两个目标模块都存在,并且输出是在删除 x.a
之后创建的(原始文件有点复杂)。
我不确定困惑在哪里:
根据定义,$<
自动变量仅包含第一个先决条件。
见 GNU make manual.
要获得比目标更新的所有先决条件,$?
是正确的自动变量。
所以正确的规则可能是:
x.a: $(OBJECTS)
echo "$? ($(OBJECTS))"
$(AR) $(ARFLAGS) $@ $?
我觉得很蠢,但我自己找不到解决办法:
我有一个 Makefile
可以从 C 源代码正确构建对象,我想将 $(OBJECTS)
放在存档库中。
我正在使用 GNU Make 4.0.
x.a: $(OBJECTS)
echo "$< ($(OBJECTS))"
$(AR) $(ARFLAGS) $@ $<
(原始行用 TAB 缩进。回显仅用于调试目的,$(AR) $(ARFLAGS) $@ $<
复制自 make
的内部规则)
进行输出(在对象构建完成后):
echo "log_thread/log_thread.o (log_thread/log_thread.o log_thread/thread.o)"
log_thread/log_thread.o (log_thread/log_thread.o log_thread/thread.o)
ar rv x.a log_thread/log_thread.o
ar: creating x.a
a - log_thread/log_thread.o
所以我希望两个对象模块都添加到库 x.a
,但是 $<
只包含一个对象模块,而不是 $(OBJECTS)
)。
我的Make知识可能有点生疏,也许这就是我不明白的原因。
当然,两个目标模块都存在,并且输出是在删除 x.a
之后创建的(原始文件有点复杂)。
我不确定困惑在哪里:
根据定义,$<
自动变量仅包含第一个先决条件。
见 GNU make manual.
要获得比目标更新的所有先决条件,$?
是正确的自动变量。
所以正确的规则可能是:
x.a: $(OBJECTS)
echo "$? ($(OBJECTS))"
$(AR) $(ARFLAGS) $@ $?