ARM GNU Compiler -j [jobs]选项存在

时间:2014-05-10 18:38:03

标签: c++ gcc makefile arm gnu

我找不到ARM GNU工具链的选项来同时编译多个c文件。我在使用gcc编译时一直使用make -j5。有助于大大加快编译时间。如果ARM GNU有类似的选择,那就太好了。

这是我的设置: --Fedora 20 - 核心i5 - 使用ARM GNU插件的Eclipse --ARM GNU 4.8-2014-q1-update(从这里:https://launchpad.net/gcc-arm-embedded) - 目标uP:STM32F205RB

我试图使CodeSourcery GCC正常工作,但未成功。经过一些设置后,ARM GNU似乎运行良好。 CodeSourcery GCC应该有一个-j选项,因为我们一直在为嵌入式linux交叉编译。

1 个答案:

答案 0 :(得分:2)

GCC不是多线程的。 -j<n>开关特定于make构建系统,而不是编译器。它告诉make它可以并行运行多少任务。

如果您运行make -j4,您可以在任务管理器/热门/进程列表中观察到它尝试运行4个GCC实例同时编译4个独立的*.c文件。

要使用-j命令,您的项目中必须有Makefile才能从中受益。它应该有多个独立的目标,以便它们可以并行启动。

如果您在术语中迷失了,我建议您查看make教程,例如: http://mrbook.org/tutorials/make/

此处通常的策略是为项目中的每个ccpp文件设置单独的目标。这样make就可以轻松地为每个编译单元生成多个编译器进程。生成所有* .o文件后,它们就会被链接。

让我们看看这个示例代码段:

SRCS  := main.c func.c other.c another_file.c ...
OBJS  := $(SRCS:.c=.o)

objects: $(OBJS)

%.o: %.c
  gcc -o $(@) -c $(<)

我们传递c个文件列表,使用后缀替换将其更改为相应的o文件,并将*.o个文件列表视为目标。现在make可以并行编译每个c文件。

相反,如果我们做这样的事情:

SRCS  := main.c func.c other.c another_file.c ...

all:
  gcc $(SRCS) -o a.out

...我们根本没有从-j切换中获益,因为只有一个目标。