Exclude source file in compilation using Makefile

C++Makefile

C++ 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondomlaoView Question on Stackoverflow
Solution 1 - C++BetaView Answer on Stackoverflow
Solution 2 - C++K1773RView Answer on Stackoverflow
Solution 3 - C++Dmitri ChubarovView Answer on Stackoverflow
Solution 4 - C++ma11hew28View Answer on Stackoverflow