在add_subdirectory之后强制安装CMake

时间:2019-06-10 14:06:02

标签: cmake

我们正在将基于大型Makefile的项目转换为基于CMake的系统。在构建代码之前,我需要构建许多依赖项。前三个依赖项是使用以下内容构建的:

add_subdirectory(dependencies/libexpat/expat)
add_subdirectory(dependencies/libuuid-1.0.3)
add_subdirectory(dependencies/log4c-1.2.4)

expat有它自己的CMakeLists.txt文件,并且构建没有问题。在继续之前,我想强制将expat安装到登台目录。对于libuuid,我使用的是ExternalProject_Add,作为该过程的一部分,它确实安装在登台目录中。

然后,当我构建需要expat的log4c时,可以将其指向expat的位置。否则,我将需要有人访问expat的临时构建位置的绝对路径。

我尝试在add_subdirectory之后添加以下内容:

add_subdirectory(dependencies/libexpat/expat)
add_subdirectory(dependencies/libuuid-1.0.3)
install(TARGETS expat LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/usr/lib)
add_subdirectory(dependencies/log4c-1.2.4)

不幸的是,CMake不会运行expat的安装代码。如何在构建之后但在构建项目的其余部分之前强制安装expat?

1 个答案:

答案 0 :(得分:2)

这看起来像ExternalProject_Add的主要用例,最好用作 superbuild 设置。这意味着您的顶级项目(“超级构建”)不会构建任何实际的代码,而是仅包含ExternalProject_Add个调用。您的“实际”项目被添加为这些“外部”项目之一。这使您可以设置具有所有依赖项,顺序等的超级构建。

工作流程如下:

  1. 生成超级构建项目。
  2. 构建超级构建项目。这将构建并安装所有依赖项,并生成(并构建)您的真实项目。
  3. 切换到为您的真实项目生成的构建系统,并开始使用该系统进行进一步的开发。在上一步中,超级构建项目的构建已经正确设置并安装了依赖项。