繁体   English   中英

Makefile 选择编译类型

[英]Makefile Selecting type of compilation

我怎样才能做到这一点,以便我可以使用make debugmake 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM