gpt4 book ai didi

c++ - 编写一个 makefile 以在调试版本中使用 -D_GLIBCXX_DEBUG

转载 作者:行者123 更新时间:2023-11-30 01:27:44 26 4
gpt4 key购买 nike

我有一个 makefile 可以简化为:

OBJS = obj1.o obj2.o

FLAGS = -Wall -Wextra -Werror -pedantic-errors -fno-rtti -std=c++0x
DEBUG_FLAGS = -ggdb -O0 -fstack-protector-all -D_GLIBCXX_DEBUG
RELEASE_FLAGS = -O3

release: $(OBJS)
g++ $(FLAGS) $(RELEASE_FLAGS) $(OBJS)

debug: $(OBJS)
g++ $(FLAGS) $(DEBUG_FLAGS) $(OBJS)

obj1.o: obj1.cpp
g++ -c $(FLAGS) obj1.cpp

obj2.o: obj2.cpp
g++ -c $(FLAGS) obj2.cpp

问题是所有文件或所有文件都必须使用 -D_GLIBCXX_DEBUG 标志构建。如果不为每个编译单元编写两个条目,我不知道该怎么做,比如

obj1_release.o: obj1.cpp
g++ -c $(FLAGS) $(RELEASE_FLAGS) obj1.cpp

obj1_debug.o: obj1.cpp
g++ -c $(FLAGS) $(DEBUG_FLAGS) obj1.cpp

只有当用户键入 make debug 而没有为每个CU? (反之亦然;当用户键入 make release 时,发布标志需要对所有 CU 生效。)

如果这是编写 Makefile 的基础知识,我很抱歉,我对它们了解不多。

最佳答案

您正在寻找pattern rules : 这样的事情应该做你想做的。请注意,除非程序的调试版本和发布版本被赋予不同的名称,否则此无法正常工作。

OBJS   := obj1 obj2 obj3
R_OBJS := $(OBJS:=_r.o)
D_OBJS := $(OBJS:=_d.o)

all: prog_r prog_d
release: prog_r
debug: prog_d

prog_r: $(R_OBJS)
$(CXX) $(CXXFLAGS) $(RELEASE_FLAGS) $(LDFLAGS) $^ $(LIBS) -o $@

prog_d: $(D_OBJS)
$(CXX) $(CXXFLAGS) $(DEBUG_FLAGS) $(LDFLAGS) $^ $(LIBS) -o $@

%_r.o: %.cc
$(CXX) $(CXXFLAGS) $(RELEASE_FLAGS) -c $< -o $@

%_d.o: %.cc
$(CXX) $(CXXFLAGS) $(DEBUG_FLAGS) -c $< -o $@

# header files
obj1_d.o obj1_r.o: foo.h bar.h
obj2_d.o obj2_r.o: quux.h
# ... etc ...

关于c++ - 编写一个 makefile 以在调试版本中使用 -D_GLIBCXX_DEBUG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8454016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com