https://www.gnu.org/software/make/manual/make.html#Catalogue-of-Rules

ользую GNU make для компиляции своего кода на C ++, и я хотел бы понять, как сделать мои компиляции настраиваемыми.

Я читал в разных местах, чтоCFLAGS, CCFLAGS а такжеCXXFLAGS используются для этой цели. Так как я должен их использовать? Если у меня есть дополнительные аргументы командной строки для компилятора, я должен добавить их кCFLAGS или предварять их? Есть ли обычная практика?

Почему три разные переменные? Я полагаю, компилятор C должен получитьCFLAGS а такжеCCFLAGSв то время как компилятор C ++ должен получить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 
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 $@

... (somewhere in the makefile, the command-line for linking looks like this)
    $(CC) $(GCOV_FLAG) $(CCFLAGSINT) $(OBJLIST) $(LDFLAGS) -o $@
lt; -o $@ ... (somewhere in the makefile, the command-line for linking looks like this) $(CC) $(GCOV_FLAG) $(CCFLAGSINT) $(OBJLIST) $(LDFLAGS) -o $@

Я почти уверен, что здесь нет ошибок; Makefile работает очень хорошо. Но есть ли что-нибудь, что идет вразрез с конвенциями (например,CCFLAGSINT - Должен ли я просто перезаписатьCCFLAGS вместо? Или жеCXXFLAGS? FUD!)

Извините за столько вопросов; Вы, очевидно, не будете отвечать на них все, но я надеюсь, что ответы помогут мне понять общую идею этих настроек.

Ответы на вопрос(2)

Ваш ответ на вопрос