Compile all CPP files using makefile under MinGW
c++, gnu-make, makefile, mingw
Solution
Add a list of your source files:
SOURCES = $(wildcard $(SRC)/*.cpp)
and a list of corresponding object files:
OBJS = $(addprefix $(TGT)/, $(notdir $(SOURCES:.cpp=.o)))
and the target executable:
$(TGT)/myapp: $(OBJS)
$(CXX) $(LDFLAGS) $(OBJS) -o $@
The rule for building the objects:
$(TGT)/%.o: $(SRC)/%.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
Now you must specify are the options for g++:
INCLUDES = -Iinclude
CXXFLAGS = -Wall -std=c++11 $(INCLUDES)
And everything together:
SRC=src
TGT=obj
INCLUDES = -Iinclude
CXXFLAGS = -Wall -std=c++11 $(INCLUDES)
SOURCES = $(wildcard $(SRC)/*.cpp)
OBJS = $(addprefix $(TGT)/, $(notdir $(SOURCES:.cpp=.o)))
$(TGT)/%.o: $(SRC)/%.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
$(TGT)/myapp: $(OBJS)
$(CXX) $(LDFLAGS) $(OBJS) -o $@
It is important, that in front of `$(CXX) ...` there must be a "tab" character, not spaces.
Problem
The directory structure of my C++ project is ``` /.. makefile <- the makefile is in root /include <- subdirectory that has to be included while compiling /obj <- target place for all *.o and final executable /src <- sources ``` And my current makefile is: ``` CC=g++ CFLAGS=-c -Wall -std=c++11 INC=-Iinclude SRC=src TGT=obj all: myapp myapp: myapp.o $(CC) $(TGT)/myapp.o -o $(TGT)/myapp myapp.o: $(CC) $(CFLAGS) $(INC) $(SRC)/myapp.cpp -o $(TGT)/myapp.o clean: rm -rf $(TGT) mkdir $(TGT) ``` This worked for my first file. I am a total makefile novice - please help me compile all files under the `/src` directory and link them to an executable in `/obj` directory. the makefile has to work under Windows, I am using MinGW and MSYS