使用Makefile在编译中排除源文件

时间:2012-04-23 07:08:18

标签: c++ makefile

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

就像有几个源文件一样,

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

然后在我的makefile中,

SRC_FILES = $(wildcard src/*.cpp)

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

4 个答案:

答案 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文件,或者如果您愿意将其重命名为以唯一字符开头,那么这只会起作用。