2010-06-22 93 views
13

我必須使用兩個不同的編譯器和庫一次性爲兩個不同的平臺構建我的代碼。我怎樣才能用單個make文件來做到這一點。如何指示Makefile使用不同的編譯器

目前我的makefile內容如下。我如何指示它在相同的生成文件中將編譯器更改爲gcc?

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) 

回答

8

我首先將所有平臺特定的定義放在一個單獨的makefile中。您可以這樣做:

include $(TARGET).make 

其中$(TARGET).make爲每個特定平臺定義CC和其他變量。然後你可以調用make遞歸地將TARGET設置爲你想要的。例如:

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

但是真的有很多很多方法可以實現同樣的目的。

0

如果在您的文章中正確保留了換行符,那將更容易閱讀。

無論如何,我希望你將必須有在Makefile了一些事情的兩個副本,這樣它的形式

all : all-platform1 all-platform2 

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

這可能是因爲你也許可以自動 - 像這樣生成一個makefile,儘管可以節省一些努力。

2

使用autoconf。當您使用./configure配置項目時,它將自動選擇可用項目。

+1

但是我有兩個編譯器可用,我想要定義makefile,以便我可以告訴它要使用哪個編譯器 – Poorna 2010-06-22 05:01:15

+0

您可以執行'./configure CC =「您的編譯器」',它將使用您的編譯器指定 – Phong 2010-06-22 05:08:06