有没有简单的自动化方法可以找到与Delphi项目相关联的所有源文件?

3
我在发布版本时喜欢备份项目的源代码集。我使用GExperts项目备份,它似乎可以将项目管理器中的所有文件收集到ZIP文件中。您还可以将任意文件添加到此文件集中,但我始终意识到我可能没有所有文件。除非我特别浏览uses子句并将我拥有源代码的所有单元添加到项目中,否则我永远无法确定存储重建可安装/可执行文件所需的所有文件。
我考虑编写一个应用程序来遍历项目,跟踪所有使用的单元,并查看所有搜索路径,以查找该单元的源文件,并通过这种方式构建要备份的文件列表,但是也许有人已经做了这项工作?
4个回答

12

强烈建议你了解版本控制。

例如:SVN(subversion)、CVS

这将允许您控制所有源代码的修订版。它将允许您添加或删除源文件、回滚合并以及其他与管理项目源相关的好东西。

有一天,这将拯救你的后半生。


@Simon 我必须承认版本控制是我感觉自己错过了某个关键环节的事情之一(当然,当我第一次遇到对象时,我也是这样想的)。我很想听听你对学习曲线/对现有项目管理程序的影响等方面的评论。 - rossmcm
我使用Subversion。它是免费的,你可以简单或复杂地使用它。寻找TortoiseSVN。你需要安装一个SVN服务器,创建一个仓库,然后使用TortoiseSVN来检查你的源代码。认真花点时间研究它-我只用了一天左右就弄明白了。 - Simon
+1 使用哪种版本控制系统并不是最重要的,只要你使用其中一种即可。在我看来,如果你正在使用版本控制系统,那么你就是在进行软件开发。 - David Heffernan
@ross 对不起,现在我明白了。你是对的,我的逻辑是相反的。我知道我在强调我的观点以产生额外的效果。但是一旦你花一点时间使用VCS,你就会明白我的意思!! - David Heffernan
@David 谢谢。我需要阅读文档了。我有点担心,因为我的资源是按特定方式(文件夹结构)排列的,我不确定是否需要改变多少。另一件让我不确定的事情是进行小的增量更改所涉及的开销。目前,我编辑源代码(使用Delphi、帮助作者、Inno Setup或其他工具),然后启动批处理文件以生成新的可安装文件。 - rossmcm
显示剩余9条评论

1

您可以从两个方面理解您的问题:

  1. 如何确保我备份了足够的文件以便构建项目
  2. 如何确保我备份的文件不过多,仍然可以构建项目

第一种是确保您可以完全构建系统的方式,第二种是允许您清理未使用的文件。

对于这两种情况,最好使用包括独立构建系统的版本控制系统。

然后,针对每组新的更改,您可以使用以下步骤来确保两个条件均得到满足:

  1. 在您的日常开发系统中,将新版本的源代码提交到您的版本控制系统中。
  2. 在您的独立构建系统上,获取源代码控制系统的最新版本。
  3. 在构建系统上构建项目;如果失败,请返回步骤1,并从开发系统向您的版本控制系统添加缺失的文件。
  4. 逐个删除您认为不需要的项目文件,然后重新构建,直到失败为止。
  5. 当构建失败时,从版本控制系统中恢复该特定文件,然后继续使用下一个候选项执行第3步
  6. 当构建成功时,您就拥有了最小的文件集。
  7. 现在,在您的版本控制系统和构建机器中制作差异概述。
  8. 将在您的版本控制系统中但不在您的构建机器上的文件标记为过时或已删除。

大多数版本控制系统都有很好的方法来生成您的开发或构建系统中的文件与您的版本控制系统中的文件之间的差异(通常对于您在版本控制系统中添加/删除/更新文件的每个历史时间点进行细粒度处理)。

你想要一个独立的构建系统(或两个独立的开发系统),是因为你想让它们相互独立:你可以使用一个系统进行开发,另一个系统则用来检查构建是否正常。
这是第一步,将来你可能想将其扩展为连续集成系统(运行单元测试,自动创建产品设置等等)。
--jeroen

虽然这正是我会使用的程序,但我不认为它符合“自动化”的标准。 - Rob Kennedy

1

我不确定你是在问版本控制还是如何确保你拥有所有的文件。

我偶尔运行一个有用的工具,它可以生成一个我的dcu输出文件夹中所有文件的DirList。将扩展名从.dcu更改为.pas可以给我列出所有源代码文件的清单。

当然,它会错过.inc文件和其他非.pas文件,但也许这种想法对你有所帮助?

对我来说,这个工具的价值在于,第二个清理工具程序会列出我的源目录树中所有没有相应.dcu文件的.pas文件。这通常会显示一些不再使用的“垃圾” .pas 文件。(在所有程序进行完整编译之后)


OQ从未提到版本控制,但我重新激起了兴趣。 - rossmcm

1

要获取编译到可执行文件中的所有单元列表,您可以让编译器生成一个MAP文件。该文件将包含所有使用的单元的条目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接