Я работаю над проектом C ++ с make-файлом. Я должен сделать несколько модификаций, но перед этим у меня есть вопрос о том, как флаги интерпретируются в GNU make. Чтобы уточнить, в следующем фрагменте у меня есть две опции, чтобы включить или отключить функцию во время компиляции моего проекта,
# Two options for a feature:
FEATURE=on off
# other lines in the make file
# By default, the feature is turned off
ifndef FEATURE
FEATURE = off
endif
# other lines in the make file
# A number of other flags are defined here
# I have defined a flag to indicate that my feature is disabled
CXXFLAGS_off = -DFEATURE_DISABLED
# Adding all the flags
CXXFLAGS += $(CXXFLAGS_$(FEATURE)) #Other flags also added
Теперь где-то в моем коде у меня есть эта строка:
#ifdef FEATURE_DISABLED
//Don't invoke the functions for the feature
#else
//Invoke the functions for the feature
#endif
Теперь во время компиляции, когда я говорю make FEATURE = on, я вижу, что программа работает нормально, с включенной функцией. Когда я говорю make FEATURE = off, он отключается.
Однако моя проблема в том, что я не совсем понимаю, как компилятор интерпретирует мой выбор. Например, я просто говорю «make FEATURE = off», как эта строка сопоставлена с тем фактом, что флаг для off включен, и как код компилируется с отключенной функцией? Как я уже писал выше, я добавляю флаги для своей функции в CXXFLAGS, но как понять, что FEATURE = off означает, что установлен флаг FEATURE_DISABLED?
Большое спасибо за любые объяснения.
Потому что ты написал
CXXFLAGS += $(CXXFLAGS_$(FEATURE))
который, когда вы поставляете FEATURE = off
на make
командная строка, расширится до
CXXFLAGS += $(CXXFLAGS_off)
который, потому что вы также определили
CXXFLAGS_off = -DFEATURE_DISABLED
в свою очередь расширяется до
CXXFLAGS += -DFEATURE_DISABLED
это означает, что компилятор будет работать с -DFEATURE_DISABLED
в качестве дополнительного аргумента.
Других решений пока нет …