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

vyo*_*yom 2 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)
Run Code Online (Sandbox Code Playgroud)

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

TIA。

rei*_*ost 5

您正在尝试编写自动执行的检查程序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
Run Code Online (Sandbox Code Playgroud)

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

  • 替换引用是你的朋友:`OBJS = $(FILES:.c=.o)`。 (2认同)