Exclude source file in compilation using Makefile
C++MakefileC++ Problem Overview
Is it possible to exclude a source file in the compilation process using wildcard function in a Makefile?
Like have several source files,
src/foo.cpp
src/bar.cpp
src/...
Then in my makefile I have,
SRC_FILES = $(wildcard src/*.cpp)
But I want to exclude the bar.cpp. Is this possible?
C++ Solutions
Solution 1 - C++
If you're using GNU Make, you can use filter-out
:
SRC_FILES := $(wildcard src/*.cpp)
SRC_FILES := $(filter-out src/bar.cpp, $(SRC_FILES))
Or as one line:
SRC_FILES = $(filter-out src/bar.cpp, $(wildcard src/*.cpp))
Solution 2 - C++
use find for it :)
SRC_FILES := $(shell find src/ ! -name "bar.cpp" -name "*.cpp")
Solution 3 - C++
You can use Makefile subst function:
EXCLUDE=$(subst src/bar.cpp,,${SRC_FILES})
Solution 4 - C++
The Unix glob pattern src/[!b]*.cpp excludes all src files that start with b.
That only would work, however, if bar.cpp is the only src file that starts with b or if you're willing to rename it to start with a unique character.