Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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
cmake能否生成非递归的makefile?_Cmake - Fatal编程技术网

cmake能否生成非递归的makefile?

cmake能否生成非递归的makefile?,cmake,Cmake,我正在涉猎cmake,它似乎生成了递归的makefile。这意味着在一个大项目中,空构建可能需要大约5秒钟,这是不可接受的 我还没有找到用cmake生成非递归makefile的方法。有可能吗?使用CMake是不可能的 可以通过修改CMake的来源。。。但我不确定这样的任务会有多小或多大,简单或复杂 不过,我敢肯定这需要5秒以上的时间。甚至在接下来的几年里,你将要做的所有空构建都会成倍增加 如果您的空构建不能接受5秒,那么可以接受的阈值是多少?一秒钟?0.25秒?奇怪的是,为了尽可能减少大型项目的

我正在涉猎cmake,它似乎生成了递归的makefile。这意味着在一个大项目中,空构建可能需要大约5秒钟,这是不可接受的


我还没有找到用cmake生成非递归makefile的方法。有可能吗?

使用CMake是不可能的

可以通过修改CMake的来源。。。但我不确定这样的任务会有多小或多大,简单或复杂

不过,我敢肯定这需要5秒以上的时间。甚至在接下来的几年里,你将要做的所有空构建都会成倍增加


如果您的空构建不能接受5秒,那么可以接受的阈值是多少?一秒钟?0.25秒?奇怪的是,为了尽可能减少大型项目的空构建时间,已经做了很多工作。

CMake使用递归make,因为它必须这样做。CMake是一个通用工具,必须动态生成依赖信息。为了与make兼容(不仅仅是gmake),您必须使用递归make才能做到这一点。CMake还支持多个级别的代码生成器。可以为CMake编写一个tup生成器。有一些工作正在做的CMake和忍者。但是,如果没有某种程度的递归make,使用普通make生成器就无法实现CMake的功能


“我不相信CMake‘必须’使用递归”如果你能创建一个非递归的makefile,并且可以处理比gmake更多的文件,并且可以动态计算依赖信息,那么它将证明它是错误的。我们确实花了很多时间试图使它不是递归的。它是“更少”的递归,它曾经是


Brad King创建了一个FAQ,描述了make在CMake中的使用方式。

虽然Makefiles的答案保持不变,但最新版本(2012年8月9日发布的CMake 2.8.9)包括默认启用的忍者生成器。一个相对大的C++代码库(Trk3D——大约241 m的源文件在大约十个方向上),平均需要忍者(从十次运行)到第二秒,决定没有剩下的事情,它平均需要(从十次运行)2.55秒(基于一个已经完全建立的项目,没有任何剩余的时间)。

所以,如果你发现Make太慢,那么CMake&Ninja可能是一个不错的选择。你在回复中提到了Tup。忍者似乎和塔普有着相似的目标


  • 基于
    find Torque3D/Engine-iname.c“-or-iname.cpp“-or-iname”*.h“| xargs dirname | sort-u | wc-l”的最佳猜测

  • 空构建的阈值是“不可察觉的”,因此不到一秒钟就可以了。对于一个合理的大型项目,有一些好的构建工具可以实现这一点。即使是普通的非递归makefile也可以做到这一点。5秒的空构建简直是疯了,我不明白为什么
    cmake
    一开始就决定发出递归makefile(这对于小项目来说是有意义的,但是对于小项目,你不需要
    cmake
    。请参阅
    tup
    ,其中整个linux发行版的空构建少于
    .5
    秒。你没有说服我。即使是普通的旧make支持
    a.o:a.c;a.exe:a.o b.a;b.o:b.c;b.a:b.o
    。我看不出有什么理由不能做到这一点。)没有。我不认为CMake“必须”使用递归。我认为他们这样做是因为它的实现更简单。我花了2天的时间弯曲make调用一次,找到源代码并将对象转储到一个源代码外的位置-递归make调用需要1/2天。阅读CMake常见问题解答,它澄清了递归make的含义。我t不是传统意义上的递归,即每个子目录都有自己的makefile。而是一个三级递归,似乎在一个递归(第2层)中生成构建依赖项,然后在另一个递归(第3层)中调用实际构建步骤他们还建议使用ninja而不是make,如果这是不可接受的。是的,ninja非常棒,的确在Cmake中有对ninja的实验支持,但是如果我已经使用了ninja,我可能会使用我自己的脚本来生成ninja文件。或者使用gyp。