Make:如何生成除一个以外的所有.c文件的列表

时间:2015-03-13 13:10:54

标签: c makefile glob

我有一个包含两个真实目标的make项目,一个测试套件和项目的可执行文件。

要构建这些我需要的规则如下:

testsuite: *.c (except executable.c) *.h
    clang ... *.c (except executable.c) -o testsuite

executable: *.c (except testsuite.c) *.h
    clang ... *.c (except testsuite.c) -o executable

如果可能的话,这是正确的语法是什么?

2 个答案:

答案 0 :(得分:2)

这样的事情应该做你想做的事。

# Explicitly list the sources specific to each target.
EXECUTABLE_SOURCES := executable.c
TESTSUITE_SOURCES := testsuite.c

# Filter out all specific sources from the common wildcard-ed sources.
COMMON_SOURCES := $(filter-out $(TESTSUITE_SOURCES) $(EXECUTABLE_SOURCES),$(wildcard *.c))

testsuite: $(TESTSUITE_SOURCES) $(COMMON_SOURCES)
        clang ....

executable: $(EXECUTABLE_SOURCES) $(COMMON_SOURCES)
        clang ....

答案 1 :(得分:1)

警告:我没有测试

您可以使用testsuite: $(filter-out executable.c,$(wildcard *.c))之类的内容。我认为需要wildcard功能,因为你不想操作字符串" *。c",但它的扩展。先决条件会自动扩展,但函数参数不会。来自info make

  

通配符扩展由' make'执行。自动进入目标   并在先决条件。在配方中,shell负责通配符   扩张。在其他情况下,通配符扩展仅在您发生时才会发生   使用'通配符'明确请求它功能