Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 生成文件通配符问题_Makefile_Wildcard - Fatal编程技术网

Makefile 生成文件通配符问题

Makefile 生成文件通配符问题,makefile,wildcard,Makefile,Wildcard,我试图编写一个makefile来选择性地包含某个文件 我已设法使其与以下各项协同工作: OBJS := $(filter-out ./build/./src/class_1.cpp.o, $(OBJS)) OBJS := $(filter-out ./build/./src/class_2.cpp.o, $(OBJS)) OBJS_1 :=./build/./src/class_1.cpp.o $(OBJS) OBJS_2 := ./build/./src/class_2.cpp.o $(OB

我试图编写一个makefile来选择性地包含某个文件

我已设法使其与以下各项协同工作:

OBJS := $(filter-out ./build/./src/class_1.cpp.o, $(OBJS))
OBJS := $(filter-out ./build/./src/class_2.cpp.o, $(OBJS))

OBJS_1 :=./build/./src/class_1.cpp.o $(OBJS)
OBJS_2 := ./build/./src/class_2.cpp.o $(OBJS)
但我想让它更通用,并使用通配符

我的理解是,以下方面应该有效:

OBJS := $(filter-out $(wildcard ./build/./src/*), $(OBJS))
我也试过了

OBJS := $(filter-out $(wildcard \./build/\./src/*), $(OBJS))
但不确定问题是在于特殊符号还是仅仅是一个基本的理解

然而,它随后抱怨有太多的主函数(类1和类2)

我对make中的通配符和过滤器的理解有什么遗漏吗

如果我用两种不同的方法打印出$(OBJS)的值,这些值是相同的,因此我不确定为什么一个解决方案可以工作,而另一个解决方案失败

但是,由于某些原因,
OBJS_1
似乎无法获取应用于
$(OBJS)

$(通配符…
函数查找文件系统中实际存在的文件(以及make执行期间可能创建的部分或全部.o文件,因此结果将因最后一个命令而异)。这肯定不是你想要的

在您的情况下,只需要执行字符串替换,make中字符串的“全部匹配”模式是百分号。因此,它应该是:

OBJS:=$(filter-out ./build/./src/%,$(OBJS))

还要注意,makefile中的空格可能具有重要意义。例如,
$(过滤器a,b)
意味着第二个参数是“b”,而不仅仅是“b”。即使这对你来说无关紧要,你也应该更加小心空格。

谢谢你的回复。我应该更具体地说明我要做什么。我只想过滤掉该目录(而不是子目录)中的文件。这似乎不正确。但它确实让我走上了正确的道路。我通过将我想要控制的文件直接放在它们自己的文件中来实现它,但不确定如果不这样做,我将如何解决这个问题。