【问题标题】:CMake force install after add_subdirectoryCMake 在 add_subdirectory 之后强制安装
【发布时间】:2019-06-10 14:06:02
【问题描述】:

我们正在将基于 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 安装?

【问题讨论】:

    标签: cmake


    【解决方案1】:

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

    工作流程如下:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 2012-09-27
      • 2010-10-13
      • 2021-10-24
      相关资源
      最近更新 更多