Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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在后续运行时跳过外部项目?_Cmake - Fatal编程技术网

如何使CMake在后续运行时跳过外部项目?

如何使CMake在后续运行时跳过外部项目?,cmake,Cmake,我正在使用CMake进行一个项目,在这个项目中我想捆绑Clang。我使用ExternalProject\u Add从源代码构建clang。然而,由于Clang和LLVM是巨大的,一个没有任何改变的make需要45秒 有没有一种方法可以让CMake只构建一次ExternalProject,然后甚至不检查在后续运行中是否有任何更改(如果已经成功构建了它)?使用ExternalProject\u Add()的最佳方法是将您的项目结构为一个完整的项目。这意味着您的顶级项目(“superbuild”)不生

我正在使用CMake进行一个项目,在这个项目中我想捆绑Clang。我使用ExternalProject\u Add从源代码构建clang。然而,由于Clang和LLVM是巨大的,一个没有任何改变的
make
需要45秒


有没有一种方法可以让CMake只构建一次ExternalProject,然后甚至不检查在后续运行中是否有任何更改(如果已经成功构建了它)?

使用
ExternalProject\u Add()
的最佳方法是将您的项目结构为一个完整的项目。这意味着您的顶级项目(“superbuild”)不生成任何实际代码,而是只包含
ExternalProject\u Add
调用。您的“真实”项目将添加为这些“外部”项目之一。这允许您使用所有依赖项、顺序等设置superbuild

工作流程如下所示:

  • 生成超级生成项目
  • 构建超级构建项目。这将构建和安装所有依赖项,并生成(和构建)真正的项目
  • 切换到为真实项目生成的buildsystem,并开始使用它进行进一步的开发。在上一步中,superbuild项目的生成已经正确设置和安装了您的依赖项,并且该生成永远不会检查您的依赖项是否过期
  • 如果需要更改依赖项的设置,请执行此操作并再次构建超级构建

  • 您是否使用推荐的方法,即您真正的项目只是另一个
    ExternalProject\u Add
    ?不,我不知道这是推荐的方法。我不明白为什么在中没有提到这一点,但这听起来是个好主意,而且确实值得推荐。@Angew因此,我制作了一个超级构建,将Clang添加为ExternalProject,并将我自己的项目添加为依赖Clang的ExternalProject。即使在我运行
    make myproject
    时,CMake也会检查Clang是否是最新的,这与以前花费的时间一样长。您是在顶级生成目录(错误)中运行
    make myproject
    ,还是在“外部”子项目(正确)的生成目录中运行?