GCC优化标志

时间:2013-12-08 23:05:49

标签: gcc flags compiler-flags

我正在尝试将一堆可执行文件组合在一起,这些可执行文件对它们进行了不同的优化。我唯一的问题是,带-c的gcc命令是否也能使用-O标志? 我问这个,因为我意识到当我只在gcc命令中放置优化标志来制作exe时,文件之间的大小根本没有差别,这似乎不对。

例如,我有这样的事情:

g++ -c cat.cpp 
g++ -c dog.cpp        
g++ cat.o dog.o -o catdog

我会在这样的所有内容上使用标志:

g++ -c -O2 sobol.cpp
g++ -c -O2 sobol_prb.cpp        
g++ sobol.o sobol_prb.o -O2 -o catdog02

如果有人能帮助我,我会非常感激。

谢谢。

3 个答案:

答案 0 :(得分:1)

是的,在每个对象编译中使用优化标志。

(一般来说,使用像SCons这样的构建系统可以使这种事情变得更容易,即使它是一个“小”项目。)

答案 1 :(得分:1)

你可以这样做:

  g++ sobol.cpp sobol_prb.cpp -O2 -o catdog02

如果需要编译2个或3个以上的文件,则应考虑使用Makefile。

如果你正在开展一个非平凡的项目,你应该开始考虑@polkadotcadaver建议的构建系统,尽管我会选择automake或cmake,因为它们比其他构建系统更受欢迎。

答案 2 :(得分:0)

当你在对象(.o)文件上执行gcc时,这基本上只是选择了适当的库来调用链接器,依此类推。在通常模式下,此步骤不涉及编译,优化标志将不起作用。

优化发生在编译步骤(具有.cpp输入的那个)和优化开关相关的位置。

故事与链接时间优化(-flto)略有不同,在编译和链接时需要使用优化开关。