方法1:
makefield如下,为了使宏生效在命令行编译时 执行make "CXXFLAG += -DDEBUG",但这样绿色的CXXFLAG会生效,CXXFLAG = -Wall -g不会生效
CXX = g++
ifdef CXXFLAG
CXXFLAG +=
else
CXXFLAG = -Wall -g
#CXXFLAG += -DDEBUG
endif
LDFLAGS +=
INCS = -I../inc
SRCS = ./
BUILDDIR = ./
LIBS += -L../lib/
MAINSRCS = $(foreach dir,${shell find $(SRCS) -type d},$(wildcard ${dir}/*.cpp))
MAINOBJS = $(patsubst %.cpp, $(BUILDDIR)%.o, $(notdir $(MAINSRCS)))
MAINAPPS = $(BUILDDIR)/test.exe
TARGET = $(BUILDDIR) $(MAINAPPS)
VPATH += $(shell find $(SRCS) -type d)
#test:
# echo $(INCS)
# echo $(MAINSRCS)
# echo $(MAINOBJS)
# echo $(VPATH)
all: $(TARGET)
#cp ./ $(BUILDDIR)
$(BUILDDIR):
mkdir -p $(BUILDDIR)
$(MAINAPPS): $(MAINOBJS)
$(CXX) $(MAINOBJS) $(LIBS) $(LDFLAGS) -o $@
$(BUILDDIR)/%.o : %.cpp
$(CXX) -c $(INCS) $(CXXFLAG) $< -o $@
clean:
rm -rf *.o
rm -rf *.exe
rm -rf *.dll
方法2:
makefield如下,为了使宏生效在命令行编译时 执行make SW_DEBUG=TRUE
CXX = g++
ifdef CXXFLAG
CXXFLAG +=
else
CXXFLAG = -Wall -g
endif
ifeq ($(SW_DEBUG), TRUE)
CXXFLAG += -DDEBUG
else
CXXFLAG +=
endif
LDFLAGS +=
INCS = -I../inc
SRCS = ./
BUILDDIR = ./
LIBS += -L../lib/
MAINSRCS = $(foreach dir,${shell find $(SRCS) -type d},$(wildcard ${dir}/*.cpp))
MAINOBJS = $(patsubst %.cpp, $(BUILDDIR)%.o, $(notdir $(MAINSRCS)))
MAINAPPS = $(BUILDDIR)/test.exe
TARGET = $(BUILDDIR) $(MAINAPPS)
VPATH += $(shell find $(SRCS) -type d)
#test:
# echo $(INCS)
# echo $(MAINSRCS)
# echo $(MAINOBJS)
# echo $(VPATH)
all: $(TARGET)
#cp ./ $(BUILDDIR)
$(BUILDDIR):
mkdir -p $(BUILDDIR)
$(MAINAPPS): $(MAINOBJS)
$(CXX) $(MAINOBJS) $(LIBS) $(LDFLAGS) -o $@
$(BUILDDIR)/%.o : %.cpp
$(CXX) -c $(INCS) $(CXXFLAG) $< -o $@
clean:
rm -rf *.o
rm -rf *.exe
rm -rf *.dll