我正在尝试将一堆可执行文件组合在一起,这些可执行文件对它们进行了不同的优化。我唯一的问题是,带-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
如果有人能帮助我,我会非常感激。
谢谢。
答案 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)略有不同,在编译和链接时需要使用优化开关。