[英]Makefile Selecting type of compilation
我怎样才能做到这一点,以便我可以使用make debug
或make release
之类的命令,以便它们都调用下面的规则集但具有不同的编译标志(例如 -g 用于调试和 -DNDEBUG 用于发布)?
# Object Files
OBJECTS := $(addprefix $(BUILDDIR)/,$(SOURCEFILES:.cpp=.o))
compile: $(OUTPUT) $(MAIN)
$(OUTPUT):
@mkdir $(BUILDDIR)
$(MAIN): $(OBJECTS)
@$(CXX) $(CXXFLAGS) $(INCLUDES) $(LIBS) -o $(OUTPUTMAIN) $(OBJECTS)
$(BUILDDIR)/%.o: %.cpp
@$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@
.PHONY: debug release
debug:
... Compile with debug flags ...
release:
... Compile with release flags ...
这并不难,只需使用特定于目标的变量值:
debug: CXXFLAGS += -g -whatever
release: CXXFLAGS += -DNDEBUG -otherstuff
debug release: $(OBJECTS)
link things...
但是你的设计有问题。 您使用debug
标志或release
标志构建 object foo.o
,但无论哪种方式,您都将其命名为foo.o
并将其放在同一个构建目录中。 所以稍后,当你构建时,说release
,并且已经有一个foo.o
,Make 会很高兴地使用它。 看到问题了吗? 我建议你有两个构建目录,一个用于debug
,一个用于release
; 还有其他方法,但您必须在修补 makefile 之前做出决定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.