Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以先编译最近更改的文件?_C++_C_Cmake - Fatal编程技术网

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有一个按钮来编译当前文件。我一直在用它。。。