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))