C++ ARM GNU编译器-j[jobs]选项存在

C++ ARM GNU编译器-j[jobs]选项存在,c++,gcc,makefile,arm,gnu,C++,Gcc,Makefile,Arm,Gnu,我找不到ARMGNU工具链同时编译多个c文件的选项。在使用gcc编译时,我一直使用make-j5。有助于显著加快编译时间。如果ARMGNU有类似的选择,那就好了 以下是我的设置: --软呢帽20 --核心i5 --带armgnu插件的Eclipse --ARM GNU 4.8-2014-q1-更新(从这里开始:) --目标:STM32F205RB 我试图让CodeSourcery GCC工作,但没有成功。ARM GNU在经过少量设置后似乎运行良好。CodeSourcery GCC应该有一个-j选

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

以下是我的设置: --软呢帽20 --核心i5 --带armgnu插件的Eclipse --ARM GNU 4.8-2014-q1-更新(从这里开始:) --目标:STM32F205RB


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

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

如果运行
make-j4
,您可以在任务管理器/top/process列表中看到它试图同时运行4个GCC实例编译4个独立的
*.c
文件

要使用
-j
命令,您的项目中必须有一个
Makefile
,该文件可以从中受益。它应该有多个独立的目标,以便它们可以并行发射

如果您对术语迷惑不解,我建议您阅读
make
教程,例如:

这里通常的策略是为项目中的每个
c
cpp
文件指定一个单独的目标。这样make就可以很容易地为每个编译单元生成多个编译器进程。生成所有*.o文件后,将链接这些文件

让我们看看这个示例片段:

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

objects: $(OBJS)

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

…我们根本不会从
-j
切换中受益,因为只有一个目标。

请注意使用
-j
选项编译工具链。它们可能和几个包有非直观的依赖关系!UHmake和编译器是两个正交概念…谢谢!我刚想发帖说我很笨,因为它是make系统而不是gcc。对于任何在eclipse中尝试这样做的人,请遵循以下步骤:1。转到:项目->属性->c/c++构建->构建器设置2。取消选中使用默认生成命令3。将-j5追加到Build命令中(或者-jX,X通常是+1的#cores),如果make支持线程编译,这通常会起作用。在我的磁盘驱动器机器上,它没有太大的区别,但在我的SSD机器上,它在1/3的时间编译。
SRCS  := main.c func.c other.c another_file.c ...

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