为目标和x86同时构建对象的简便方法

时间:2013-12-04 04:15:24

标签: build compilation makefile cross-compiling

目前,这是我为x86编译器构建目标文件的方法。

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

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

2 个答案:

答案 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 $@