Меня просят написать Makefile, который должен выбирать между двумя компиляторами, и каждый из этих компиляторов должен поддерживать 3 версии сборки (отладка, выпуск, тестирование).
Существует множество переменных, которые меняются в зависимости от ввода (компилятор, параметры компилятора, каталог вывода, каталоги включения и т. Д.). Моим первым вариантом было пройти через переменные, специфичные для цели, и настроить переменные в соответствии с целью. Как вы думаете, это хорошая идея?
Я не очень знаком с такими переменными. Мне кажется, что если я сделаю что-то вроде этого:
release: variable1=value1 #release is target
release: variable2=value2
release:
# some compilation rule
Будет настроено только variable1
. Я прав насчет этого?
Обновление
Спасибо за ваш ответ. Я пытаюсь решить проблему выбора компилятора с помощью дополнительной переменной, которая будет настроена в соответствии с целью. Но здесь есть проблема. У меня есть следующие строки:
release: CFLAGS = -DCORE_SW_VERSION='"$(CORE_SW_VERSION)"' -Wall
release: CFLAGS += -fgnu89-inline -mno-volatile-cache $(INCLUDE)
release: TARGET=release
После этих строк я делаю некоторую последовательность ifeq
, в которой я решаю, какой компилятор использовать (в соответствии со значением переменной TARGET).
И CFLAGS настроен правильно, но переменная TARGET пуста. Это приводит меня к выводу, что вы можете настроить только одну целевую переменную. Я прав? Если нет, я не знаю, что я делаю неправильно. Не могли бы вы помочь мне?