Как GNU понимает, установлен ли флаг?

Я работаю над проектом 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?

Большое спасибо за любые объяснения.

2

Решение

Потому что ты написал

CXXFLAGS += $(CXXFLAGS_$(FEATURE))

который, когда вы поставляете FEATURE = off на make командная строка, расширится до

CXXFLAGS += $(CXXFLAGS_off)

который, потому что вы также определили

CXXFLAGS_off = -DFEATURE_DISABLED

в свою очередь расширяется до

CXXFLAGS += -DFEATURE_DISABLED

это означает, что компилятор будет работать с -DFEATURE_DISABLED в качестве дополнительного аргумента.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]