从一家新公司开始,我注意到他们在我们的大部分解决方案中使用了统一cpp文件,我想知道是否有人能够给出一个明确的理由,说明为什么以及如何加快构建过程?我原以为在Unity文件中编辑一个cpp文件会强制重新编译所有这些文件.
gcc在我传递-O2标志时优化代码,但是我想知道如果我将所有源文件编译为目标文件然后再将它们链接起来,它实际上能做到多少.
这是一个例子:
// in a.h
int foo(int n);
// in foo.cpp
int foo(int n) {
return n;
}
// in main.cpp
#include "a.h"
int main(void) {
return foo(5);
}
// code used to compile it all
gcc -c -O2 foo.cpp -o foo.o
gcc -c -O2 main.cpp -o main.o
gcc -O2 foo.o main.o -o executable
Run Code Online (Sandbox Code Playgroud)
通常情况下,gcc应该内联,foo因为它是一个很小的功能并-O2启用-finline-small-functions,对吧?但是在这里,gcc只能在创建目标文件之前看到代码foo和main独立代码,所以不会有这样的优化,对吧?那么,像这样的编译真的会让代码更慢吗?
但是,我也可以像这样编译它:
gcc -O2 foo.cpp main.cpp -o executable
Run Code Online (Sandbox Code Playgroud)
会更快吗?如果没有,这样会更快吗?
// in foo.cpp
int foo(int …Run Code Online (Sandbox Code Playgroud)