是否有任何软件用于根据文件更改重新编译基于CMake的软件项目? 我正在研究一个C++软件项目,它使用它的构建系统。该软件构建在Mac OS/X、Linux和Windows上

是否有任何软件用于根据文件更改重新编译基于CMake的软件项目? 我正在研究一个C++软件项目,它使用它的构建系统。该软件构建在Mac OS/X、Linux和Windows上,c++,build-automation,cmake,C++,Build Automation,Cmake,为了改进我通常的hack/compile/test周期,我想知道是否有一些类似于守护进程的软件能够识别CMake项目考虑的所有源文件。每当修改任何源文件时,守护进程都会注意到这一点并重建受影响的目标。我的想法是,我的周期中的“编译”步骤将变得更快,因为它可以立即返回,并说“因为您的友好邻居hood build daemon已经重建了所有文件,所以无需执行任何操作” 有人知道现有的软件可以这样做吗?如果没有-是否有可能导出CMake考虑的源文件列表,以便我自己编写一个小守护程序来监视这些文件并自动

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

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

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

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

可以找到一个很好的代码示例

您可以这样做:

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处理其余部分。对不起,我输入了一个错误-我的问题是:如何使用JNotify等工具找出要监视的文件?我想知道CMake认为哪些文件是“来源”。@Frerich:这取决于你的项目。我建议您查看一下用于构建的makefile,在检查之后,您可能能够推断出哪些文件需要监视。一点实验也可能有帮助:-)但是,告诉JNotify哪些内容不应该被监控可能更重要。其中包括生成的文件,如“exe”、“o”、“dll”等,以及可能添加的文件,如html或txt。