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

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

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

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

【问题讨论】:

    标签: c++ build-automation cmake


    【解决方案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。
    猜你喜欢
    • 2017-04-28
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2017-11-02
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多