如何指示Makefile使用不同的编译器 [英] How to instruct Makefile to use different compilers

查看:111
本文介绍了如何指示Makefile使用不同的编译器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须使用两个不同的编译器和库一次为两个不同的平台构建代码.如何使用单个Make文件来做到这一点.

I have to build my code for two different platforms at once using two different compilers and libraries. How can I do this with single make file.

目前我的makefile内容如下.如何指示它在同一makefile中将编译器更改为gcc?

Currently my makefile contents are given below. How can I instruct it to change the compiler to gcc within the same makefile?

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):
    -@$(MKDIR) "$(OUTPUT_DIRECTORY)"
endif

ifneq ($(OBJ),)
all: $(OBJ)
$(OBJ_DIR):
    -@$(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 $@ $<


EXECUTABLE=MyExecutable

all: $(SOURCES) $(EXECUTABLE)

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

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


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

推荐答案

我首先将所有特定于平台的定义放在单独的makefile中.这样就可以做到:

I'd start by putting all the platform-specific defines in a separate makefile. That way you can do:

include $(TARGET).make

其中$(TARGET).make为每个特定平台定义CC和其他变量.然后,您可以调用make将TARGET递归设置为所需的内容.像这样:

Where $(TARGET).make defines CC and other variables for each particular platform. Then you can call make recursively setting TARGET to what you want. Something like:

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

但是实际上有很多方法可以实现相同的目标.

But really there are many, many ways in which you can achieve the same thing.

这篇关于如何指示Makefile使用不同的编译器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆