Makefile
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This is an example of a quite generic GNU Makefile
CXX = $(shell wx-config --cxx) PROGRAM = yourproject OBJECTS = $(PROGRAM).o # implementation .SUFFIXES: .o .cpp .cpp.o : $(CXX) -c `wx-config --cxxflags` -o [email protected] $< all: $(PROGRAM) $(PROGRAM): $(OBJECTS) $(CXX) -o $(PROGRAM) $(OBJECTS) `wx-config --libs` clean: rm -f *.o $(PROGRAM)
To tell the Makefile that every .cpp file must be made into an object, you can define OBJECTS as:
OBJECTS := $(patsubst %.cpp,%.o,$(wildcard *.cpp))
You could have problem to compile with 'wx-config --sth' because GCC try to compile a file called "wx-config --sth". Then you can use it as variable :
CXX = $(shell wx-config --cxx) PROGRAM = yourproject # wx-config --libs WX_LIBS = $(shell wx-config --libs) # wx-config --cxxflags WX_CXXFLAGS = $(shell wx-config --cxxflags) OBJECTS = $(PROGRAM).o # implementation .SUFFIXES: .o .cpp .cpp.o : $(CXX) $(WX_CXXFLAGS) -c -o [email protected] $< all: $(PROGRAM) $(PROGRAM):$(OBJECTS) $(CXX) $(WX_LIBS) -o $(PROGRAM) $(OBJECTS)
Alternative makefile
This makefile uses gcc to include dependecies for the source files in the makefile, and allows you to specify which objects you want to use for every target.
# Define default flags (include your source tree for example INCFLAGS = -I./src CXXFLAGS = `wx-config --cxxflags` LDFLAGS = `wx-config --ldflags` LDLIBS = `wx-config --libs` REZFLAGS = `wx-config --rez-flags` ifdef FINAL EXTRAFLAGS = -MD -O2 -fno-rtti -fno-exceptions -fomit-frame-pointer else EXTRAFLAGS = -MD -g endif # Define our sources, calculate the dependecy files and object files TEST_SOURCES := src/Sourcefile1.cc src/Sourcefile2.cc src/MainSourceFile.cc TEST_OBJECTS := $(patsubst %.cc, %.o, ${TEST_SOURCES}) TEST_DEPS := $(patsubst %.cc, %.d, ${TEST_SOURCES}) #include our project dependecy files -include $(TEST_DEPS) all: test test: $(TEST_OBJECTS) $(CXX) $(LDFLAGS) -o test $(TEST_OBJECTS) Test_resources.o $(LDLIBS) ifdef FINAL strip test.exe endif Test_resources.o: Test.rc windres -i Test.rc -o Test_resources.o $(REZFLAGS) clean: rm -rf test.exe test $(TEST_OBJECTS) $(TEST_DEPS) Test_resources.o
Bakefiles
Moved to Bakefile