Хороший способ сделать «переключение» в Makefile

StackOverflow https://stackoverflow.com/questions/200205

  •  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

А Makefile использован мерзавец является хорошим примером Makefile, который выполняет нетривиальные задачи настройки в самом Makefile (например, переключение типа хоста).На самом деле он довольно читабелен и достаточно прост в использовании.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top