Я использую 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!)
Извините за столько вопросов; вы, очевидно, не ответите им, но я надеюсь, что ответы помогут мне понять общую идею этих настроек.