我想说的是,这是一个缺失的功能。
为什么呢?
因为 cc
可以是 clang
或者 gcc
。
cc -c t1.c t2.c (multi-files at once)
vs
cc -c t1.c
cc -c t2.c
...
(one by one)
有什么不同之处?
输出的 .o 文件相同,虽然逐个文件的方式可以指定-o name
,这在使用自定义工具链时可能很有用。
区别在于性能。除了启动 cc 的时间外,如果多个文件使用相同的 .h 头文件集(在大多数情况下会是这样),则头文件只需加载一次,而不是每个文件都要加载。
如果使用多个库,则头文件可能非常大。一个典型的 .pch(预编译头)文件可能达到10MB。
在我的小项目的实际测试中,我将所有 .cpp 组合成一个 .cpp,使用#include "others.cpp"
,编译时间从 600 毫秒减少到 300 毫秒。
c/cpp 编译速度较慢,因此这可能是一个很有用的功能。
可以像这样:
cc -c t1.c -o t1.o t2.c -o t2.o (specify output name per file)
或者
cc -c t1.c t2.c -o mylib.a (If some one say .o can't be combined
, then link to a lib in one command line)
我希望clang或gcc的开发者能看到这篇文章。但即使他们同意这个观点,也不必等待修复。(在开源开发者之间争论可能很无望,除非他们从自身意识到了什么)。您可以尝试其他答案中提到的方法。