Я использую GNU make для компиляции моего кода на С++, и я хотел бы понять, как сделать мои компиляции настраиваемыми.
Я читал в разных местах, что CFLAGS, CCFLAGS и CXXFLAGS используются для этой цели. Итак, как я должен их использовать? Если у меня есть дополнительные аргументы командной строки для компилятора, я должен добавить их в CFLAGS или добавить их? Существует ли обычная практика?
Почему три разные переменные? Я предполагаю, что компилятор C должен получить CFLAGS и CCFLAGS, тогда как компилятор С++ должен получить CFLAGS и CXXFLAGS - я правильно понял?
Предполагается ли, что пользователь должен установить эти переменные вообще? Устанавливаете ли какие-либо автоматические инструменты (automake, autoconf и т.д.)? Система linux, которую я должен использовать, не определяет ни одну из этих переменных - это типичный?
В настоящее время мой Makefile выглядит так, и я чувствую, что это немного грязно:
ifdef code_coverage
    GCOV_FLAG := -fprofile-arcs -ftest-coverage
else
    GCOV_FLAG :=
endif
WFLAGS := -Wall
INC_FLAGS := -Istuff -Imore_stuff -Ietc
CCFLAGSINT := -O3 $(WFLAGS) $(INC_FLAGS) $(CCFLAGS)
... (somewhere in the makefile, the command-line for compilation looks like this)
    $(CC) $(CCFLAGSINT) -c $< -o [email protected]
... (somewhere in the makefile, the command-line for linking looks like this)
    $(CC) $(GCOV_FLAG) $(CCFLAGSINT) $(OBJLIST) $(LDFLAGS) -o [email protected]
Я уверен, что здесь нет ошибок; Makefile работает очень хорошо. Но есть ли что-либо, что противоречит соглашениям (например, CCFLAGSINT - вместо того, чтобы просто перезаписать CCFLAGS? Или CXXFLAGS? FUD!)
Извините за столько вопросов; вы, очевидно, не ответите им, но я надеюсь, что ответы помогут мне понять общую идею этих настроек.