是否可以使用Makefile中的通配符功能在编译过程中排除源文件?
就像有几个源文件一样,
src/foo.cpp
src/bar.cpp
src/...
然后在我的makefile文件中,
SRC_FILES = $(wildcard src/*.cpp)
但是我想排除bar.cpp。这可能吗?
Answers:
如果您使用的是GNU Make,则可以使用filter-out
:
SRC_FILES := $(wildcard src/*.cpp)
SRC_FILES := $(filter-out src/bar.cpp, $(SRC_FILES))
或作为一行:
SRC_FILES = $(filter-out src/bar.cpp, $(wildcard src/*.cpp))
:=
时,该变量的定义需要解决的其他变量:“这些定义可以包含变量引用由定义之前,这将扩大”
使用查找:)
SRC_FILES := $(shell find src/ ! -name "bar.cpp" -name "*.cpp")
您可以使用Makefile subst函数:
EXCLUDE=$(subst src/bar.cpp,,${SRC_FILES})
在Unix的水珠图案的src / [!B] *。CPP排除以b开头的SRC文件。
但是,如果bar.cpp是唯一以b开头的src文件,或者您愿意将其重命名为以唯一字符开头,则这仅会起作用。
.SECONDEXPANSION
通配符和模式替换(例如)时locales/%/_bundle.ftl: $$(wildcard locales/%/[!_]*.ftl)
,此方法非常有用。谢谢!
Makefile
S陌生?因此,在阅读了这个出色的答案之后,请查找=
和之间的区别:=
(两者都在上面使用),并找出为什么通常会:=
尽可能使用它!