【问题标题】:Is it possible to inject code into translation unit immediately before compilation是否可以在编译前立即将代码注入翻译单元
【发布时间】:2011-08-25 13:38:12
【问题描述】:

我使用 MSVC++ 2008 和 2010 构建了我的 C++ 代码库。是否有可能获取翻译单元,对其进行分析,在必要时插入一些代码,然后传递到编译过程?原始源代码不应受到影响。

当然,对于构建项目的开发人员来说,它应该是透明的。最后,它只会影响目标文件。 Visual Studio 非常强大。我想,应该有某种插件 API 或钩子来做到这一点。请给我一个提示。

【问题讨论】:

  • 'translation unit' 在这里是模棱两可的。您要分析源文件、预处理的源文件还是生成的目标文件?
  • 您是否正在寻找可以在每次构建时将信息添加到相同文件的东西?或者也许它一次将它添加到这个文件,然后另一个文件?
  • 每次构建。代码应注入从预处理器传递到编译器的翻译单元。源文件不应受到影响。
  • 你能转储预处理的代码,用常规的代码分析工具分析它,然后将它传递给 cl 吗?你的构建机制 atm 是什么?
  • 我使用标准 Visual Studio 的解决方案/项目方案。

标签: c++ visual-c++ visual-c++-2008 visual-c++-2010


【解决方案1】:

我不相信这是可能的,正如你所描述的那样,虽然我不确定。这肯定不是微不足道的。唯一能想到的类似项目是OpenMP,但我的印象是微软是实现他们版本的人。

不过,我可以看到 Cheetah 这样的模板引擎就足够了。不过,您可能会放弃代码完成和智能感知等花里胡哨的功能。

基本上,您可以设置文件以使用自定义编译器在另一个文件中生成新代码。然后 C++ 编译器将编译生成的文件。坦率地说,我不认为它使用起来会很优雅或令人愉快。

我使用 CMake 做类似的事情,虽然我没有将它作为通用工具。我为一些内容生成写了一个。

也许如果您确实描述了您想要做的一些细节,我们可以提供更好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2014-05-06
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 2012-08-09
    • 2012-09-22
    相关资源
    最近更新 更多