我有一个相当复杂的SCons脚本编译一个大的C ++项目 This gcc manual页面说:
编译器根据程序的知识执行优化。一次编译多个文件到单个输出文件模式允许编译器在编译每个文件时使用从所有文件中获取的信息。
所以最好将我的所有文件都放到一个g++
调用中,然后让它驱动编译,但它很随意。
但是SCons没有这样做。它为项目中的每个C ++文件单独调用g++
,然后使用ld
有没有办法让SCons这样做?
答案 0 :(得分:1)
拥有能够表达依赖关系的构建系统的主要原因是支持某种条件/增量构建。否则,您也可以使用您需要的一个命令来使用脚本。
话虽如此,手动描述的gcc / g ++优化结果是实质性的。特别是如果您经常使用C ++模板。适合运行时性能,不利于重新编译性能。
我建议你尝试让你自己的建造者做你需要的。这是另一个带有鼓舞人心的答案的问题:SCons custom builder - build with multiple files and output one file
答案 1 :(得分:0)
目前答案是否定的。
与此类似的逻辑仅针对MSVC开发。 您可以在手册页(http://scons.org/doc/production/HTML/scons-man.html)中看到此内容,如下所示:
MSVC_BATCH当设置为任何真值时,指定SCons应该 调用Microsoft Visual时批量编译目标文件 C / C ++编译器。来自同一来源的所有源文件汇编 在同一输出目录中生成目标文件的目录 使用相同的构造环境将在SCons中配置 可以在一次调用编译器的情况下构建。只有具有的源文件 自从构建目标文件后更改将被传递给每个 编译器调用(通过$ CHANGED_SOURCES构造变量)。 任何编译对象(目标)文件基本名称(减去 .obj)与源文件基本名称不匹配将被编译 分开。
一如既往,欢迎补丁以更一般的方式添加。
答案 2 :(得分:-1)
一般来说,这应由程序开发人员负责。尝试在合并中一起编译所有可能会导致程序的意外行为,如果它甚至首先编译。如果您想在不自行编辑源代码的情况下进行此类优化,最好的办法是使用具有icc -ipo
之类的进程间优化的编译器。
如果两个.c
文件合并不能编译的示例,例如,如果它们使用两个具有不同功能的相同static
个符号。