Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/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
将CmakeList划分为子项目的正确方法_Cmake - Fatal编程技术网

将CmakeList划分为子项目的正确方法

将CmakeList划分为子项目的正确方法,cmake,Cmake,在一个cmake项目中,有几个相互依赖的库和几个可执行文件,并且有cmake计算库间依赖项,并生成非递归的makefiles,这样空编译速度会很快(至少对于unix来说) 这似乎过时了,在最近的cmake中不起作用,并且似乎生成递归生成文件。根据设计,生成递归生成文件是必要的: CMake实际上不会生成遵循目录结构的真正递归Make文件。它生成一个固定的3级makefile结构,其中每个级别都有一个定义的用途: Makefile:命令行界面入口点。将“make”调用映射为对2级makefile的

在一个
cmake
项目中,有几个相互依赖的库和几个可执行文件,并且有
cmake
计算库间依赖项,并生成非递归的makefiles,这样空编译速度会很快(至少对于unix来说)

这似乎过时了,在最近的cmake中不起作用,并且似乎生成递归生成文件。

根据设计,生成递归生成文件是必要的:

CMake实际上不会生成遵循目录结构的真正递归Make文件。它生成一个固定的3级makefile结构,其中每个级别都有一个定义的用途:

  • Makefile:命令行界面入口点。将“make”调用映射为对2级makefile的调用:
    • make-f CMakeFiles/Makefile2…
  • CMakeFiles/Makefile2:目标间依赖关系。按照依赖关系顺序对目标求值,调用级别3中依赖的每个目标和构建步骤:
    • make-f CMakeFiles/$(target.dir/build.make…/depend
    • make-f CMakeFiles/$(target.dir/build.make…/build
  • cmakfiles/.dir/build.make:文件级依赖项和规则:
    • depend:
      计算自定义命令(以生成源文件),然后扫描源以查找隐式依赖项
    • build:
      加载上一步的依赖项扫描结果。编译和链接

  • 你所说的空编译是什么意思?为什么你坚持使用非递归的makefile?@kynan,空编译-当项目没有任何更改时发出
    make
    。我要求这将花费不到1秒的时间。使用recursive make甚至需要5秒钟,这在我的工作流程中是不可接受的。