make SCons在一个gcc行中编译所有内容
make SCons compile everything in one gcc line?
我有一个相当复杂的SCons脚本,用来编译一个大型c++项目。
这个gcc手册页说:
编译器根据它对程序的了解执行优化。一次编译多个文件到一个输出文件模式允许编译器在编译每个文件时使用从所有文件中获得的信息。
所以最好把我所有的文件交给一个g++
调用,让它随心所欲地驱动编译。
但SCons不这样做。它为项目中的每个c++文件分别调用g++
,然后使用ld
有办法让SCons这样做吗?
拥有一个能够表达依赖关系的构建系统的主要原因是为了支持某种条件/增量构建。否则,您还不如使用一个脚本和您需要的一个命令。
也就是说,按照手册描述的那样对gcc/g++进行优化的结果是实质性的。特别是如果您有经常使用的c++模板。
对运行时性能有利,对重新编译性能不利我建议你试着让你自己的建设者做你需要的。下面是另一个问题,答案很鼓舞人心:SCons自定义构建器-构建多个文件并输出一个文件
目前的答案是否定的。
类似的逻辑仅为MSVC开发。您可以在手册页(http://scons.org/doc/production/HTML/scons-man.html)中看到如下内容:
MSVC_BATCH当设置为任何真值时,指定SCons应该在调用Microsoft Visual时批量编译目标文件C/c++编译器。来自同一源的源文件的所有编译目录,在相同的输出目录中生成目标文件使用相同的构建环境在SCons中配置在对编译器的一次调用中构建。只有源文件具有自从它们的目标文件被构建后所做的更改将被传递给每个编译器调用(通过$CHANGED_SOURCES构造变量)。对象(目标)文件基名(减去.obj)不匹配的源文件基名将被编译分开。
一如既往,欢迎补丁以更通用的方式添加此
一般来说,这应该留给程序开发人员。试图在合并中一起编译可能会给程序引入意想不到的行为,即使它首先编译。如果您希望在不编辑源代码的情况下进行这种优化,那么您最好的选择是使用具有进程间优化的编译器,如icc -ipo
。
合并两个.c
文件无法编译的例子是,如果它们使用两个相同的static
符号,但功能不同。
- 为什么 gcc 编译这个而 msvc 没有
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- GCC,CMake,预编译标头和维护依赖项
- GCC 8.3 无法编译 std::bind_front
- Clang不会编译GCC会编译的模板专业化
- 使用交叉工具ng编译gcc时出错
- 编译 GCC-5.0 OS X 狮子 dyld:找不到符号:__ZNKSt11logic_error4whatEv
- 在类中将不完整类型的unique_ptr初始化为 nullptr 时编译 gcc 错误
- 除了 Linux 上的源代码和编译 (GCC) 之外,有没有办法在 Windows 中托管 IDE
- 在 64 位 debian 上编译 GCC 的代码可视化补丁
- 编译gcc 4.6.4中的boost::move
- 模板编译:gcc vs VS2010
- C++ 使用编译器编译"gcc"简单文件
- 如何从php编译GCC
- 在 Visual Studio 中编译 gcc 代码会导致错误 C3646:"__attribute__":未知的覆盖说明符
- 在windows上编译gcc 4.7
- 在Vortex86DX上从头开始构建和编译GCC 5.2.0时出错
- 在编译GCC时出错部分模板专门化,而不是MSVC
- GLM Math lib 编译 GCC 错误
- Synology交叉编译GCC -std=c++0x