同时为target和x86构建对象的简单方法



目前,这是我为x86编译器构建对象文件的方式。

CC=g++
%.o: %.cpp
     $(CC) $(CFLAGS) $(INCPATH) $(LIBPATH) -DPC -c $^ -o $@

如何在g++和交叉编译器之间轻松切换?如何同时为目标编译x86和二进制文件?我现在似乎只限于使用一个编译器进行编译。有没有一种方法可以做到这一点,而不必逐一列出我的所有对象文件?

您可以在给定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-,那么它将被编译为ARM

你可以使用任何你想要的工具链-概念保持不变

Sagar的答案确实涉及如何在编译器之间切换,但没有涉及如何同时切换和问题的主要部分,即如何同时切换两个目标。

要同时实现这两个目标,您可能需要将对象分离到与所使用的编译器或目标相关的目录中,然后根据对象的目录,找出要使用的编译器。

因此,在最简单的情况下,如下所示,其中源位于当前目录中,并且目录与编译器名称相同。根据对象文件的目录,在用户定义的COMPILER函数中填充您喜欢的编译器名称计算方式,该目录是函数的参数$1。

define COMPILER
$1
endef
.PRECIOUS: %/.
%/.:
        mkdir -p $@
.SECONDEXPANSION:
%.o: $$(notdir $$*.cpp) | $$(@D)/.
        $(call COMPILER, $(@D)) -c $< -o $@

最新更新