C++ ARM GNU编译器-j[jobs]选项存在
我找不到ARMGNU工具链同时编译多个c文件的选项。在使用gcc编译时,我一直使用make-j5。有助于显著加快编译时间。如果ARMGNU有类似的选择,那就好了 以下是我的设置: --软呢帽20 --核心i5 --带armgnu插件的Eclipse --ARM GNU 4.8-2014-q1-更新(从这里开始:) --目标:STM32F205RBC++ 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选
我试图让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