目前,这是我为x86编译器构建目标文件的方法。
CC=g++
%.o: %.cpp
$(CC) $(CFLAGS) $(INCPATH) $(LIBPATH) -DPC -c $^ -o $@
如何在g ++和交叉编译器之间轻松切换?如何同时为我的目标编译x86和二进制文件?我现在似乎仅限于使用一个编译器进行编译。有没有办法实现这个,而不必逐个列出我的所有目标文件?
答案 0 :(得分:0)
您可以在提供make
时传递工具链只需要一个额外的变量CROSS_COMPILE
即可
makefile看起来像这样
CROSS_COMPILE :=
CC=$(CROSS_COMPILE)g++
%.o: %.cpp
$(CC) $(CFLAGS)$(INCPATH) $(LIBPATH) -DPC -c $^ -o $@
因此,如果你只是给make
,那么CC
被用作g++
并被编译为x86,如果你给make CROSS_COMPILE=arm-none-linux-gnueabi-
那么它将被编译为{{1} }}
您可以使用任何您想要的工具链,概念保持不变
答案 1 :(得分:0)
Sagar的答案确实解决了如何在编译器之间切换,但没有解决如何做到这一点以及问题的主要部分,即如何同时执行两个目标。
要同时执行这两个目标,您可能希望将对象分成与编译器或目标相关的目录,然后根据对象的目录,找出要使用的编译器。
因此,在最简单的情况下,如下所示,源位于当前目录中,并且目录与编译器名称相同。根据目标文件的目录(函数的参数$ 1)填写用户定义的COMPILER函数以及计算编译器名称的方式。
define COMPILER
$1
endef
.PRECIOUS: %/.
%/.:
mkdir -p $@
.SECONDEXPANSION:
%.o: $$(notdir $$*.cpp) | $$(@D)/.
$(call COMPILER, $(@D)) -c $< -o $@