是否可以先编译最近更改的文件?
Posted
技术标签:
【中文标题】是否可以先编译最近更改的文件?【英文标题】:Is it possible to compile recently changed files first? 【发布时间】:2021-01-21 23:23:09 【问题描述】:以下场景经常发生:
我更改了包含在很多地方的标题,例如添加函数声明。 我在对应的源文件中添加了一个函数定义,因为我笨,所以有错误。 我在编译,并等待了很长时间编译了一堆不相关的东西,然后才看到我正在处理的代码中的错误。如果 cmake 会优先编译最近修改的文件,那么在这些情况下我的测试周期时间会减少几分钟。这可能吗?
【问题讨论】:
用一个单独的(子)项目(例如测试套件)编译更改的文件怎么样,然后再将它粘到整个野外?这可能更像是您如何水平和垂直布局架构的问题。 不是标准品牌。我怀疑cmake
是否有可能。在添加函数定义之前在后台运行构建?
您可以使用 makefile 或 ninja 生成器构建特定的 .o 文件。通过这样做,您可以专门为您更改的源构建 .o 文件。
潜在方法:使用 shell 命令(make 中的$(shell …)
,CMake 中的execute_process
?我不使用 CMake。)以修改时间的相反顺序列出文件。用目标模块扩展名(.o 或 .obj)替换源扩展名(.c 等)。现在您有了一个按照您希望它们构建的顺序排列的对象列表。让他们成为目标的附属物,比如 OrderedObjects。制定目标。
Visual Studio 有一个按钮来编译当前文件。我一直在使用它...
【参考方案1】:
我在 CMake 中找不到任何通用的允许您指定构建顺序的内容,但您可以使用允许您编译单个 .o 或 .obj 文件的特定构建系统生成器来执行此操作。例如,使用 Ninja 生成器:
add_executable(mytarget the-suspect-src.cpp)
生成的 Ninja 构建系统允许我通过明确指定来构建相应的 .o 文件:
ninja CMakeFiles/mytarget.dir/the-suspect-src.cpp.o
因此您可以通过以下方式实现您想要的行为:
ninja CMakeFiles/mytarget.dir/the-suspect-src.cpp.o && ninja
请注意,我不会记住 .o 文件的这些路径,而是在终端中使用制表符完成。
我碰巧知道 Makefile 生成器也具有构建单个 .o 文件的类似能力,但我不知道有任何其他生成器具有这种能力。
【讨论】:
以上是关于是否可以先编译最近更改的文件?的主要内容,如果未能解决你的问题,请参考以下文章
是否有任何软件可以在文件更改时重新编译基于 CMake 的软件项目?