gpt4 book ai didi

makefile - 如何指示 Makefile 使用不同的编译器

转载 作者:行者123 更新时间:2023-12-03 23:51:29 26 4
gpt4 key购买 nike

我必须使用两个不同的编译器和库同时为两个不同的平台构建我的代码。如何使用单个 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):
-@$(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 中。这样你可以这样做:

include $(TARGET).make

其中 $(TARGET).make 为每个特定平台定义 CC 和其他变量。然后你可以调用 make 递归地将 TARGET 设置为你想要的。就像是:
build:
$(MAKE) TARGET=platform1 all
$(MAKE) TARGET=platform2 all

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

关于makefile - 如何指示 Makefile 使用不同的编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com