Makefile

From WxWiki
Jump to navigation Jump to search

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 $@ $<
 
 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 $@ $<

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