У меня есть make-файл, который можно уменьшить до этого:
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
Как сделать так, чтобы флаг -D_GLIBCXX_DEBUG
(и другие флаги отладки) вступали в силу для всех модулей компиляции, только когда пользователь вводит make debug
без записи двух записей для каждого CU? (И наоборот; флаги выпуска должны вступать в силу на всех CU, когда пользователь вводит make release
.)
Я прошу прощения, если это основы написания Make-файлов, я не знаю много о них.