Я використовую 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
компілятори самі ?