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

从makefile中动态生成文件/对象列表,makefile,gnu-make,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_fi

我正在尝试这样做:

从目录中,选择所有
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)
定义测试\u tgt=
DIR=full/path/to/DIR
文件=$(通配符$(DIR)/*.c)
OBJS=
恩德夫
获取新文件:
$(评估$(测试)
最终目标:获取新文件
$(CC)$(OBJS)
不知何故,这似乎不起作用。我看到很多类似的例子,但不确定是什么 这是错误的。如果这种方法不正确,有人能提出更好的解决方法吗 做到这一点


TIA。

您正在尝试编写一个检查程序,该检查由
make
自行执行。 只需将
$(OBJS)
列为最终目标的依赖项即可

类似的东西应该在GNU make下工作:

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

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

这里有完整的文档:

替换引用是您的朋友:
OBJS=$(文件:.c=.o)
@reinierpost,谢谢,我也会尝试一下。我在另一个SO线程上找到了一个解决方案,它使用了,
target:>$@
,然后
-包括target
?如果目标文件是生成文件,则只能包含目标文件。