是否可以在Makefile中使用通配符函数在编译过程中排除源文件?
就像有几个源文件一样,
src/foo.cpp
src/bar.cpp
src/...
然后在我的makefile中,
SRC_FILES = $(wildcard src/*.cpp)
但我想排除bar.cpp。这可能吗?
答案 0 :(得分:94)
如果您使用的是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))
答案 1 :(得分:11)
使用find for it:)
SRC_FILES := $(shell find src/ ! -name "bar.cpp" -name "*.cpp")
答案 2 :(得分:5)
您可以使用Makefile subst功能:
EXCLUDE=$(subst src/bar.cpp,,${SRC_FILES})
答案 3 :(得分:1)
Unix glob模式src / [!b] *。cpp排除所有以b开头的src文件。
但是,如果bar.cpp是唯一以b开头的src文件,或者如果您愿意将其重命名为以唯一字符开头,那么这只会起作用。