从makefile中动态生成文件/对象列表

时间:2011-09-22 18:51:03

标签: makefile gnu-make

我正在尝试这样做:

从目录中选择所有C.c)个文件,生成.o并将其添加到 我的最终目标执行。 C文件可以随时添加或删除,所以当我 为我的目标运行make,必须选择目录中的可用C文件 编译并链接到我的目标。

到目前为止,我有以下内容:

define test_tgt = 
DIR = full/path/to/dir
FILES = $(wildcard $(DIR)/*.c)
OBJS = <rule-to-convert-C-to-O>
endef

get_new_files: 
     $(eval $(test_tgt))

final-target: get_new_files 
      $(CC) <other-objs> $(OBJS)

不知何故,这似乎不起作用。我看到很多类似的例子,但不确定是什么 这里错了。如果这种方法不正确,任何人都可以提出更好的方法 做到这一点。

TIA。

1 个答案:

答案 0 :(得分:4)

您正在尝试编写make自己执行的检查。 只需将$(OBJS)列为final-target的依赖项。

这样的东西应该在GNU make下工作:

DIR = full/path/to/dir
FILES = $(wildcard $(DIR)/*.c)
OBJS = $(subst .c,.o,$(FILES))

final-target: $(OBJS)
    $(LD) -o $@ $+  # or similar

完整文档在此处:https://www.gnu.org/software/make/manual/html_node/Text-Functions.html