Makefile &引用;通配符;函数提取目录中的源文件。

Makefile &引用;通配符;函数提取目录中的源文件。,makefile,gnu-make,Makefile,Gnu Make,我需要实现以下场景。我必须从特定目录中提取所有源文件。因此,过滤掉某些内容并编译其余内容。我正在按如下方式实施此案例 SOURCES = $(wildcard $(ROOT_DIR)/SRC/*.c) FILTERED_SOURCES= $(filter-out $(ROOT_DIR)/SRC/File1.c, $(SOURCES)) 我在这里面临的问题是File1.c没有被过滤掉。我预测可能的原因是filter out函数中使用的模式是一个带有斜线和点的长路径名。这里的问题是 是否可以只将文

我需要实现以下场景。我必须从特定目录中提取所有源文件。因此,过滤掉某些内容并编译其余内容。我正在按如下方式实施此案例

SOURCES = $(wildcard $(ROOT_DIR)/SRC/*.c)
FILTERED_SOURCES= $(filter-out $(ROOT_DIR)/SRC/File1.c, $(SOURCES))
我在这里面临的问题是File1.c没有被过滤掉。我预测可能的原因是filter out函数中使用的模式是一个带有斜线和点的长路径名。这里的问题是

  • 是否可以只将文件名而不是整个路径存储在“源”
  • “过滤”命令中是否存在除所述内容以外的任何可疑内容

  • 您是否尝试打印出
    源的值
    ?或者,
    $(ROOT\u DIR)
    是否包含空格

    SOURCES := $(wildcard $(ROOT_DIR)/SRC/*.c)
    $(error $(SOURCES))
    
    就我个人而言,我会使用并过滤结果列表将所有内容转换为绝对路径

    SOURCES          := $(abspath $(wildcard $(ROOT_DIR)/SRC/*.c))
    FILTERED_SOURCES := $(filter-out $(abspath $(ROOT_DIR)/SRC/File1.c), $(SOURCES))
    
    要返回使用原始的
    $(ROOT\u DIR)
    前缀(通常是可选的),可以使用:


    是的,可以(并且很容易)将
    $(SOURCES)
    减少为文件名,但是我想找出这个问题的原因。您能给我们看一下
    $(ROOT\u DIR)
    ?谢谢您的回复Beta和Eldar!!我使用一个“notdir”函数解决了我的问题(1),该函数刚刚从完整路径中提取了文件名。我还没有分析使用完整路径时未发生过滤的原因。@Vivek27,您是否尝试过使用绝对路径的解决方案?我对它是否有效感兴趣。
    SOURCES          := $(patsubst $(abspath $(ROOT_DIR))%,$(ROOT_DIR)%,$(SOURCES))
    FILTERED_SOURCES := $(patsubst $(abspath $(ROOT_DIR))%,$(ROOT_DIR)%,$(FILTERED_SOURCES))