是否有任何软件可以在文件更改时重新编译基于 CMake 的软件项目?

Posted

技术标签:

【中文标题】是否有任何软件可以在文件更改时重新编译基于 CMake 的软件项目?【英文标题】:Is there any software for recompiling a CMake-based software project on file changes? 【发布时间】:2011-02-07 12:41:13 【问题描述】:

我正在开发一个使用 CMake 作为构建系统的 C++ 软件项目。该软件基于 Mac OS/X、Linux 和 Windows 构建。

为了改进我通常的 hack/compile/test 周期,我想知道是否有一些类似守护进程的软件可以识别 CMake 项目所考虑的所有源文件。每当修改任何源文件时,守护程序都会注意到这一点并重建受影响的目标。这个想法是,我的周期中的“编译”步骤会变得更快,因为它可以立即返回说“无事可做,因为您的友好邻居构建守护程序已经重建了所有文件。”。

有没有人知道可以这样做的现有软件?如果不是 - 是否有可能导出 CMake 考虑的源文件列表,以便我自己编写一个小守护程序来监视这些文件并自动重新运行make(或适合所选生成器的任何内容)?在最好的情况下,我还可以获得依赖关系树,这样我就可以一遍又一遍地跳过检查所有依赖关系,只更新我需要的目标。

【问题讨论】:

【参考方案1】:

我使用JNotify 成功地监控文件更改,没有太多麻烦。

它适用于您提到的所有操作系统,并且文件更改检测几乎是即时的。它可以检测文件的创建、删除、修改等。

可以在here找到一个不错的代码示例。

你可以这样做:

class CMakeListener implements JNotifyListener 
    public void fileModified(int wd, String rootPath, String name) 
       // if a file is a cpp or hpp file, execute CMake
    

你的 CMake 任务应该是自动化的。

【讨论】:

谢谢,这很有趣。但是,我首先需要找出要修改的文件 - 有没有办法让 CMake 打印这个列表? @Frerich:这不应该是你关心的问题。 CMake 应该足够聪明,能够检测到发生了什么变化并采取适当的行动。每当发生更改时调用它并让 CMake 负责休息只是您的工作。 抱歉,我打错了 - 我的问题是:我如何找出要 monitor 使用的文件,例如J通知?我想知道 CMake 将哪些文件视为“来源”。 @Frerich:这取决于您的项目。我建议看一下用于构建的makefile,经过检查,您可能能够推断出哪些文件需要监视。一些实验也可能会有所帮助 :-) 但是,告诉 JNotify 应该监视什么可能更重要。这包括生成的文件,例如“exe”、“o”、“dll”等,以及您可能添加的文件,例如 html 或 txt。

以上是关于是否有任何软件可以在文件更改时重新编译基于 CMake 的软件项目?的主要内容,如果未能解决你的问题,请参考以下文章

如果我编辑EDMX文件,它是否会更改除自身以外的任何文件及其设计器文件?

用于在头文件更改时构建简单 c 项目重新编译的示例 makefile

是否可以创建一个具有基于另一个属性更改的属性类型的接口,而无需在编译时明确知道它?

在开发时同步电子应用程序中的代码更改

在代码更改时重新编译页面

Xcode 在没有任何更改时重建项目