C++ 是否可以先编译最近更改的文件?
以下情况经常发生:C++ 是否可以先编译最近更改的文件?,c++,c,cmake,C++,C,Cmake,以下情况经常发生: 我更改了包含在许多地方的标题,例如添加函数声明 我在相应的源文件中添加了一个函数定义,因为我是哑巴,所以有一个错误 我编译,等了很长时间,一堆不相关的东西才被编译,直到我看到我正在处理的代码中的错误 如果cmake首先优先编译最近修改过的文件,那么在这些情况下,我的测试周期将缩短几分钟。这是可能的吗?我在CMake中找不到任何允许您指定生成顺序的通用工具,但您可以使用特定的生成系统生成器来实现这一点,该生成器允许您编译单个.o或.obj文件。例如,使用忍者生成器: add
- 我更改了包含在许多地方的标题,例如添加函数声明
- 我在相应的源文件中添加了一个函数定义,因为我是哑巴,所以有一个错误
- 我编译,等了很长时间,一堆不相关的东西才被编译,直到我看到我正在处理的代码中的错误
如果cmake首先优先编译最近修改过的文件,那么在这些情况下,我的测试周期将缩短几分钟。这是可能的吗?我在CMake中找不到任何允许您指定生成顺序的通用工具,但您可以使用特定的生成系统生成器来实现这一点,该生成器允许您编译单个.o或.obj文件。例如,使用忍者生成器:
add_executable(mytarget the-suspect-src.cpp)
生成的Ninja构建系统允许我通过显式指定来构建相应的.o文件:
ninja-CMakeFiles/mytarget.dir/嫌疑犯src.cpp.o
因此,您可以通过以下方式实现所需的行为:
ninja-CMakeFiles/mytarget.dir/嫌疑犯src.cpp.o&&ninja
请注意,我没有记住这些指向.o文件的路径,而是在终端中完成制表符
我碰巧知道Makefile生成器也具有构建单个.o文件的类似能力,但我不知道有任何其他生成器具有这种能力。在将更改后的文件粘贴到整个大范围之前,如何使用单独的(子)项目(例如testsuite)编译更改后的文件?这可能更像是一个如何水平和垂直地布置架构的问题,而不是标准制造。我怀疑在
cmake
中是否可能。在添加函数定义之前,在后台运行构建?您可以使用makefile或ninja生成器构建特定的.o文件。通过这样做,您可以专门为您更改的源代码构建.o文件。可能的方法是:使用shell命令($(shell…
在make中,在CMake中执行
过程?我不使用CMake。)以与修改时间相反的顺序列出文件。用对象模块扩展(.o或.obj)替换源扩展(.c等)。现在,您有了一个对象列表,按照您希望构建它们的顺序排列。使它们成为目标的从属对象,例如OrderedObject。Visual Studio有一个按钮来编译当前文件。我一直在用它。。。