The cool thing about make is that you can let it auto-detect almost everithing. In my case I specify just the project name (actually, the name I want to get for the executable), the custom library I'm about to use (boost_thread-mt), and the debugging options (-Wall -g).
As a source names I can say "all the files with .cpp extension", as objects "all the source files, changing their extension to .o", and this is it.
I don't even have to specify the compiler I'm actually using. Make is smart enough to get it by its own.
Here is my Makefile:
#
# Makefile for some Boost testing
#
MY_NAME := hello
MY_SRCS := $(wildcard *.cpp)
MY_OBJS := ${MY_SRCS:.cpp=.o}
MY_INCLUDE_DIRS :=
MY_LIBRARY_DIRS :=
MY_LIBRARIES := boost_thread-mt
CXXFLAGS += $(foreach includedir,$(MY_INCLUDE_DIRS),-I$(includedir))
CXXFLAGS += -Wall -g
LDFLAGS += $(foreach librarydir,$(MY_LIBRARY_DIRS),-L$(librarydir))
LDLIBS += $(foreach library,$(MY_LIBRARIES),-l$(library))
.PHONY: all clean
all: ${MY_NAME}
$(MY_NAME): $(MY_OBJS)
$(LINK.cc) $(MY_OBJS) -o $(MY_NAME) $(LDLIBS)
clean:
@- rm -rf $(MY_OBJS) $(MY_NAME)
OK, there are still a few nuisances. The Makefile syntax is not beautiful, most remarkably the mandatory TAB character in the task lists is a real pain. But, all in all, we can't complain.
No comments:
Post a Comment