82

是否可以在 Makefile 中使用通配符函数在编译过程中排除源文件?

就像有几个源文件一样,

src/foo.cpp
src/bar.cpp
src/...

然后在我的makefile中,

SRC_FILES = $(wildcard src/*.cpp)

但我想排除 bar.cpp。这可能吗?

4

4 回答 4

151

如果您使用的是 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))
于 2012-04-23T12:52:55.357 回答
17

使用 find :)

SRC_FILES := $(shell find src/ ! -name "bar.cpp" -name "*.cpp")
于 2012-04-23T07:16:07.047 回答
7

您可以使用 Makefile subst 功能:

 EXCLUDE=$(subst src/bar.cpp,,${SRC_FILES})
于 2012-04-23T07:12:25.363 回答
4

Unix glob模式 src/[!b]*.cpp 排除了所有以 b 开头的src 文件。

但是,只有当 bar.cpp 是唯一以 b 开头的 src 文件,或者您愿意将其重命名为以唯一字符开头时,这才有效。

于 2015-09-26T18:24:43.303 回答