Хороший способ сделать «переключение» в Makefile
-
03-07-2019 - |
Вопрос
Я экспериментирую с обновленной системой сборки на работе;в настоящее время я пытаюсь найти хороший способ установить компилятор и флаги в зависимости от целевой платформы.
То, что я хотел бы сделать, это что-то вроде
switch $(PLATFORM)_$(BUILD_TYPE)
case "Linux_x86_release"
CFLAGS = -O3
case "Linux_x86_debug"
CFLAGS = -O0 -g
case "ARM_release"
CC = armcc
AR = armlink
CFLAGS = -O2 -fx
...
который не поддерживается GNU Make.Теперь моей первой мыслью было просто сделать
-include $(PLATFORM)_$(BUILD_TYPE)
это довольно приличное решение, однако из-за него сложно получить представление о различиях между файлами, не говоря уже о том, что я с нетерпением жду написания и поддержки хороших 60-80 файлов, каждый из которых содержит набор определений переменных. .
Кто-нибудь случайно знает лучший способ добиться этого?Т.е.установка набора флагов и других параметров на основе другой переменной?
Решение
Переключиться на систему, которая сделает это за вас (automake/autoconf), возможно, будет проще...
Другие советы
Как насчет:
CFLAGS_Linux_x86_release = -O3
CFLAGS_Linux_x86_debug = -O0 -g
CFLAGS = ${CFLAGS_${PLATFORM}_${BUILD}}
Настройка таких параметров будет задачей configure
сценарий.
При этом вы можете изучить синтаксис для условные предложения и условные функции.Например, вы можете попробовать следующее:
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
CFLAGS = -O3
endif
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
CFLAGS = -O0 -g
endif