2011-03-31 100 views
1

正如我们所知,Build编译所有使用的单元,编译编译仅更改使用的单元。但是,当您使用ifdefs并需要多次更改时,您必须多次构建该项目。 如果你有很多库,你知道这个IFDEF不会改变行为,没有理由再次建立这个库。使用OTA修改设置文件

我想要做的发现是一种对IDE说某些文件已更改并调用编译而不是生成的方式。

如何获取单位和我知道的其他人,但有些知道如何将单位设置为已修改?

韩国社交协会


找不到为什么解决我的问题呢。我发现了一种将其设置为已修改的方法,问题在于它不会强制IDE按照我的设想构建它。 有人知道对档案进行什么样的检查才能发送进行编译?

+1

+1;好问题。 – 2011-03-31 19:29:42

+0

您是否尝试更改(“触摸”)磁盘上的文件日期时间? – 2011-04-05 15:35:38

+0

是的,我喜欢。如果我最小化IDE并在最大化IDE后询问文件是否被修改并询问是否要重新打开它,会发生什么情况。如果我说我想,在下次编译时,这些单元将被重新编译。但是,如果我没有这样做,这是行不通的:/任何想法让我知道,我测试并在这里张贴结果。 Tks – 2011-04-05 19:38:03

回答

0

以更简单的方式解决。我刚刚删除了文件的DCU并确定,它会再次编译它。 :D http://paste.ideaslabs.com/show/KCB9cq2Z8c

+0

更好的解决方案,我想。如果DCu不存在,则时间戳不再重要。您也可以将DCU文件恢复到去年。 :-) – 2011-04-08 18:53:33

0

让我们假设你想要的是标记修改的编辑器缓冲区。假设有一个编辑器缓冲区可以修改,在大多数情况下,对于项目中的大多数项目来说,这是不存在的。让我们假设你始终打开项目中的每个文件,然后也许你可以用这种方式调整这些打开的单元。

我的想法是,您实际上不仅需要标记修改的编辑器缓冲区,而且还需要接触由于#define更改而需要重建的磁盘上的所有文件。

要知道哪些文件受到影响,您需要阅读所有文件。我认为,你一次又一次地可靠地做这件事的可能性,比做一件建筑材料的速度要快很多。

但是,如果您确实决定采用它,则不仅需要修改缓冲区已修改标志,还需要修改当前项目组中的任何其他文件,或者包含在搜索或库路径中的文件夹,找到任何可能受到影响的文件。

您可以看到,也许这比您第一次想到的要复杂。

而且,就OTA而言,这里是IOTAEditor属性,Modified,它是只读的。

的OTA不希望你改变它:

IOTAEditor = interface(IUnknown) 
    ['{F17A7BD0-E07D-11D1-AB0B-00C04FB16FB3}'] 
    ... 
    function GetModified: Boolean; 
    .. 
    property Modified: Boolean read GetModified; 
    .. 
    end; 

但你实际上可以修改缓冲区内容本身,这将设置标志。

使用IOTAEditorContent,获取内容(IStream),修改它(添加空格),然后再次修改它(删除空格)。现在你已经设置了脏位(为了运气,调用GetModified)。

我发现从JCL JclStackTraceViewerStackCodeUtils.pas一些示例代码,展示了如何使用阅读编辑内容IOTAEditorContent:

​​3210

后重新阅读你的问题,在我看来,你只是想纪念打开的编辑器缓冲区全部改变,然后进行编译,以提高速度。所以你可能想要做到这一点:拿上面的代码,使用Supports()获取IOTAEditorContent,并调整每一个。

更新:简短和甜美的版本:修改缓冲区是不够的。另外,您不需要为需要更改的文件设置缓冲区,再加上触摸磁盘上的文件不会达到您想要的效果。所以不,你不能做你想做的事。即使您可以以某种方式修改编译器对Make-style依赖性和修改检查的功能,您可能会在IDE中导致很多问题。

+0

Tks,我会明天测试并发布结果。 – 2011-03-31 21:46:32

+0

那么,Saci有什么结果? – 2011-04-07 21:22:18

+0

沃伦P,关于你的回答'OTA不希望你改变它:',我找到了一个替代方案。在IOTAModule70接口上,我可以将存档设置为修改而没有问题,我不需要任何缓冲区。这里是我使用它的代码http://paste.ideaslabs.com/show/4zoAGrEx3h,如果你想看看所有的代码让我知道我发布在这里。 好的,但是,将其设置为已修改并不足以完成我想要的功能,但我会尽其所能。 – 2011-04-08 12:43:57

-1

在IOTAModule70 =接口(IOTAModule50)我会找到MarkModified: 说明: {MarkModifed将标志着该模块为“修改”实际上不表明 为什么被它修饰(这将导致内部文件日期保持不变)。 这强制IDE要求保存此模块,当用户尝试 关闭它。它还将清除新的未命名模块的“可丢弃性”,例如选择文件|新建|应用程序时。 }

+0

-1,仔细阅读[@Warren答案](http://stackoverflow.com/questions/5504574/set-file-as-modified-using-ota/5505491#5505491)。这只有在编辑器缓冲区标记为已修改时才有效。 – jachguate 2011-04-05 15:29:02

+0

在我的情况下,我想更改我的文件,这些ifdefs是详细信息。 – 2011-04-05 19:14:12

+0

其他的事情,无法改变上面的评论。 你测试过了吗? 肯定是无效的,我可以设置修改没有由我的IDE打开单位。检查代码并制作你的睾丸。 http://paste.ideaslabs.com/show/4zoAGrEx3h – 2011-04-05 19:21:29