【发布时间】:2019-02-08 14:39:35
【问题描述】:
我有一个生成文件,我希望它能够生成发布版本和调试版本。当我刚跑的时候:
make
我希望 CXXFLAGS 是:
-std=c++11 -Isrc/includes -c -Os
当我跑步时
make debug
我希望 CXXFLAGS 是
-std=c++11 -Isrc/includes -c -g
我试图通过使用虚假目标并将额外的标志附加到 CXXFLAGS 变量来做到这一点,但是这些额外的标志永远不会被附加。为什么 make debug 还是会产生:
g++ -std=c++11 -Isrc/includes -c src/file.cpp -o build/obj/file.o
不是预期的
g++ -std=c++11 -Isrc/includes -c -g src/file.cpp -o build/obj/file.o
什么时候运行?
makefile 的内容:
vpath %.cpp src/macro
vpath %.cpp src/data_types
vpath %.hpp src/includes
vpath %.cpp src
CXX := g++
CXXFLAGS := -std=c++11 -Isrc/includes -c
LXX = g++
LXXFLAGS :=
BUILDDIR := build
OBJDIR := $(BUILDDIR)/obj
SRCS := $(notdir $(shell find -name '*.cpp'))
OBJS := $(patsubst %.cpp, $(OBJDIR)/%.o, $(SRCS))
all: release aval
aval: builddir $(OBJS) $(SRCS)
$(LXX) $(LXXFLAGS) $(OBJS) -o $(BUILDDIR)/aval
$(OBJDIR)/%.o: %.cpp
$(CXX) $(CXXFLAGS) $^ -o $@
.PHONY: release
release: CXXFLAGS += -Os
release: LXXFLAGS += -s -Os
.PHONY: debug
debug: clean db aval
.PHONY: db
db: CXXFLAGS += -g
.PHONY: builddir
builddir:
@mkdir -p $(OBJDIR)
.PHONY: clean
clean:
@rm -f -r build/obj/*.o
@rm -f build/avalanche
【问题讨论】:
-
db: CXXFLAGS += -g表示变量CXXFLAGS已针对目标db更新,但没有其他目标,即不是“全局”