Я використовую GNU make для компіляції коду С ++, і я хотів би зрозуміти, як зробити мої компіляції настроюваними.
Я читаю в різних місцях 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 $< -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!)
Вибачте за стільки питань; ви, очевидно, не будете відповідати на всі, але я сподіваюся, що відповіді допоможуть мені зрозуміти загальну ідею цих налаштувань.
gccабоclangкомпілятори самі ?