【发布时间】:2019-06-10 14:15:48
【问题描述】:
有很多问题询问如何加快 C++ 代码的编译速度。我需要做相反的事情。
我正在使用一个监控编译器调用的软件来进行静态代码分析。但如果编译器进程关闭得太快,监控软件可能会错过它。所以我需要减慢编译速度。我知道这是一个糟糕的解决方案,希望它只是暂时的。
我想出了两个解决方案:
- 禁用并行构建,启用预处理器和编译器列表生成。它可以工作,但需要大量的鼠标点击
- 使用编译器选项强制包含以某种方式减慢编译速度的特殊头文件。
不幸的是,我无法同时想出一些简单的编写和难以编译的东西。大量使用#warning 似乎有效,但显然会使输出明显混乱。
我使用 Keil 和 armcc 编译器,所以我可以使用大部分 C++11,但最大模板递归深度仅为 63。
最好不要对二进制大小或运行时间产生任何开销。
UPD:我会试着澄清一下。 我知道这是一个可怕的想法,我知道这个问题应该以不同的方式解决。我会尝试以不同的方式解决它,但我也想探索这种可能性。
【问题讨论】:
-
你总是可以在编译器中抛出一些表达式模板。这些可能会迅速膨胀,导致编译需要很长时间。
-
如果这个监视编译器的软件是你发明的,那么只需将编译命令替换为首先调用编译器然后指示编译器被调用并完成的命令。例如,它可以写入日志消息或发送网络消息。然后寻找那个指示而不是寻找编译器进程。
-
@Amomum,这是 XY 问题的缩影。减慢编译速度是触发静态分析的一种糟糕方法,而且很可能无法完全或可靠地工作。如果您想要静态分析,那么要么将其直接集成到构建系统中,要么将其设置为单独的关注点。
-
在 Unix/Linux 下,我可能会在一个实际上是命名管道的文件上尝试
#include,而另一端的发送进程会在几秒钟内将标头内容滴出。 -
您似乎问错了问题。如果您的问题严格来说是“在不产生二进制输出的情况下编译什么 C++ 代码需要很长时间”,好的。但这似乎不是您需要或想要的。你真正想要的是一个通知编译器调用的解决方案(被否决)。
标签: c++ c optimization compilation