Pergunta

Eu estou experimentando com um sistema de compilação atualizada no trabalho; Atualmente, estou tentando encontrar uma boa maneira de conjunto compilador & bandeiras, dependendo da plataforma de destino.

O que eu gostaria de fazer é algo como

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
     ...

que não é suportado por GNU make. Agora, meu primeiro pensamento foi apenas para fazer

-include $(PLATFORM)_$(BUILD_TYPE)

que é uma solução bastante decente, no entanto, torna-se difícil obter uma visão geral do que difere entre os arquivos, para não mencionar que eu estou ansioso para escrever e manter uma boa 60-80 arquivos, cada um contendo um conjunto de definições de variáveis.

Alguém por acaso sabe a melhor maneira de conseguir isso? Ou seja, definindo um conjunto de bandeiras e outras opções com base em outra variável?

Foi útil?

Solução

A mudança para um sistema que faz isso por você (automake / autoconf) pode ser mais simples ...

Outras dicas

Como sobre: ??

CFLAGS_Linux_x86_release        = -O3
CFLAGS_Linux_x86_debug          = -O0 -g


CFLAGS  = ${CFLAGS_${PLATFORM}_${BUILD}}

Configuração de tais parâmetros seria a tarefa de um script configure.

Dito isto, você pode olhar para a sintaxe para condicionais e funções condicionais . Por exemplo, você pode tentar o seguinte:

ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
    CFLAGS = -O3
endif
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
    CFLAGS = -O0 -g
endif

O Makefile usado por git é um bom exemplo de um Makefile que faz tarefas de configuração não triviais no próprio Makefile (tal como comutação do tipo hospedeiro). É realmente muito legível e razoavelmente simples de usar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top