2010-06-22 7 views
13

Tengo que crear mi código para dos plataformas diferentes a la vez usando dos compiladores y bibliotecas diferentes. ¿Cómo puedo hacer esto con un único archivo make?Cómo indicar a Makefile que use compiladores diferentes

Actualmente mi contenido de archivo se muestra a continuación. ¿Cómo puedo indicarle que cambie el compilador a gcc dentro del mismo archivo MAKE?

VPATH = /root/Documents/project/src 

CROSS_COMPILE = /opt/compilers/bin/compiler1 
CXX = $(CROSS_COMPILE)-g++ 
CC = $(CROSS_COMPILE)-gcc 
AS = $(CROSS_COMPILE)-as 
AR = $(CROSS_COMPILE)-ar 
NM = $(CROSS_COMPILE)-nm 
LD = $(CROSS_COMPILE)-ld 
OBJDUMP = $(CROSS_COMPILE)-objdump 
OBJCOPY = $(CROSS_COMPILE)-objcopy 
RANLIB = $(CROSS_COMPILE)-ranlib 
STRIP = $(CROSS_COMPILE)-strip 


CFLAGS  = -c -Wall -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ 
LDFLAGS  = -L. -L/etc/ACE_wrappers/lib 
CPPFLAGS  += -I/etc/ACE_wrappers -I/etc/ACE_wrappers/ace 
LDLIBS  = -lACE 

OUTPUT_DIRECTORY=/root/Documents/bin 
OBJ=/root/Documents/obj 

ifneq ($(OUTPUT_DIRECTORY),) 
all: $(OUTPUT_DIRECTORY) 
$(OUTPUT_DIRECTORY): 
    [email protected]$(MKDIR) "$(OUTPUT_DIRECTORY)" 
endif 

ifneq ($(OBJ),) 
all: $(OBJ) 
$(OBJ_DIR): 
    [email protected]$(MKDIR) "$(OBJ)" 
endif 

SOURCES=File_1.cpp File_2.cpp 

OBJECTS=$(SOURCES:%.cpp=$(OBJ)/%.o) 

$(OBJ)/%.o: %.cpp 
    @echo Building Objects 
    $(CC) $(CFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c -o [email protected] $< 


EXECUTABLE=MyExecutable 

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
    @echo $(SOURCES) 
    $(CC) $(LDFLAGS) $(OBJECTS) $(LDLIBS) -o $(OUTPUT_DIRECTORY)/[email protected] 

File_1.o:File_1.cpp 
File_1.o:File_1.cpp 


.PHONY: clean 
clean: 
    rm $(OBJECTS) $(OUTPUT_DIRECTORY)/$(EXECUTABLE) 

Respuesta

8

Comenzaría poniendo todas las definiciones específicas de la plataforma en un archivo MAKE separado. De esa manera usted puede hacer:

include $(TARGET).make 

Donde $ (TARGET) .make define CC y otras variables para cada plataforma en particular. Luego puede llamar a hacer ajustes recursivos de TARGET a lo que desee. Algo como:

build: 
    $(MAKE) TARGET=platform1 all 
    $(MAKE) TARGET=platform2 all 

Pero en realidad hay muchas, muchas formas en que puede lograr lo mismo.

0

Eso sería mucho más fácil de leer si los saltos de línea se conservan correctamente en su puesto.

De todos modos, espero que usted va a tener que tener dos copias de un número de cosas en el Makefile, como que es de la forma

all : all-platform1 all-platform2 

stuff-platform1 : requirements 
    $(CC1) whatever 
stuff-platform2 : requirements 
    $(CC2) whatever 

Es posible que usted podría ser capaz de auto -generar un archivo MAKE así, para ahorrar un poco de esfuerzo.

2

Usar autoconf. Cuando configure el proyecto con ./configure, elegirá automáticamente el disponible.

+1

Pero tengo ambos compiladores disponibles, quiero definir el archivo MAKE para poder decir qué compilador usar – Poorna

+0

Puede hacer './configure CC =" su compilador '' y se configurará con el que usted especificar – Phong

Cuestiones relacionadas