gpt4 book ai didi

c++ - 函数级别的 C++ 智能生成文件

转载 作者:行者123 更新时间:2023-11-28 08:16:11 27 4
gpt4 key购买 nike

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .




10年前关闭。




复制/粘贴自:

http://forums.cgsociety.org/showthread.php?f=89&t=1010489

当您处理一个使用繁重模板函数的大型 .cpp 文件时,您是否觉得很烦人,当您更改函数中的一个字符时,有时您必须等待整整一分钟才能编译整个文件?好吧,你们中的一些人可能已经将大 .cpp 的某些部分移动到新文件中,但我正在考虑一个更自动化的过程。

所以我想知道是否有一个makefile和一个编译器支持在函数级别构建一个.cpp。这意味着如果您要更改一个函数,则只会重新编译该函数,而不是整个文件。如果没有这样的事情,这里有一个 python 脚本的基本思想:

预赛:

每个文件*.cpp 都有一个目录,其中包含上次构建的 .cpp 的最后一个拷贝(我们将其称为旧拷贝),以及 file.cpp 中每个函数的 func*.cpp 文件。

现在对于构建过程:

  • 如果 file.cpp 比它的旧拷贝更新(按文件日期比较),那么它需要重建。
  • 区分新旧 file.cpp,并最终确定更改的功能。如果除了功能之外发生了一些变化,请重新创建整个 file.cpp 目录。
  • 为每个更改的函数创建一个新的 func.cpp,其中将包含所有头文件,以及在 file.cpp 中出现在它之前的所有函数的原型(prototype)。
  • 为所有 func*.cpp 文件运行常规构建过程。

  • 一些细节:
  • 也将是一个包含所有全局变量的文件,并且每个 func*.cpp 除了以前的函数原型(prototype)之外,还有以前全局变量的 extern 声明。
  • 请注意,调试会自然地在 func*.cpp 文件上进行。
  • 函数符号与其 .cpp 之间的连接可以通过符号 db 文件进行。

  • 评论:
  • 这将是一个聪明的编译步骤,使用任何可以顺利融入构建管道的当前编译器工具。
  • 想想影响。就像每个函数都有一个单独的 .cpp 文件一样。你能想象平均编译时间的提升吗?
  • 对于那些将编译过程委托(delegate)给链接时间的人(Visual Studio 优化部分/gl/ltcg),请务必注意,您等待的时间更长,而且效果不大,至少对于日常工作而言代码。所以我个人禁用了这些。
  • 似乎有人已经给这个想法起了名字:
    http://en.wikipedia.org/wiki/Incremental_compiler
    有没有人尝试过适用于 Windows 的 IBM VisualAge C++ 编译器?
  • 最佳答案

    仅编译 .cpp 文件的摘录的想法存在一些问题。

  • 编译单元不仅仅是功能。您在文件范围内也有变量。您的摘录生成器必须检测这些变量并将它们声明为 extern。您还必须为变量创建单独的摘录。如果您在文件范围内有静态变量,必须保持静态并且不能为某些摘录声明为 extern。
  • 即使它被视为邪恶,C++ 预处理器也支持 #define 会影响整个编译单元的内容。您的摘录生成器必须检测所有未使用 #if 子句抑制的 #defines。
  • 与编译完整的 .cpp 文件相反,编译所有摘录时会得到不同的输出文件。这会影响链接过程。

  • 这一切将使编译过程更加复杂。将编译单元排除在外要多得多。

    关于c++ - 函数级别的 C++ 智能生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705415/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com