【问题标题】:Spurious targets when installing a software with CMake使用 CMake 安装软件时的虚假目标
【发布时间】:2016-06-22 15:54:18
【问题描述】:

我写了一个软件,它的配置、构建和安装都是通过一些 CMake 文件来执行的。该软件是在基于单元和功能测试的持续集成过程中开发的。我注意到与这些测试相对应的目标是在安装步骤中构建的。根本没有必要,我想了解如何阻止 CMake 这样做。

输入后

make install

我得到以下输出:

[ 7%] 构建目标arpack

[ 15%] 内置目标提升

[ 23%] 构建目标特征

[ 31%] 构建目标 yamlcpp

[ 34%] 构建目标 simol-core

[ 36%] 构建目标 simol-quantchem

[ 80%] 构建目标 simol-statphys

[88%] 构建目标 gtest

[ 91%] 构建目标 simol_test_unit

[ 92%] 构建目标 simol_test_functional

[ 93%] 构建目标 test_bichainfpu

[ 94%] 构建目标 test_dpde

[ 95%] 构建目标 test_fluid

[ 96%] 构建目标 test_galerkin

[ 97%] 构建目标 test_hamiltonian

[ 98%] 构建目标 test_langevin

[ 99%] 构建目标 test_rotor

[100%] 构建目标 test_trichain

从 88% 到 100% 的步骤绝对是虚假的,因为我不安装任何测试,而只安装软件的核心及其模块。例如,安装 simol-statphys (80%) 的 CMake 命令是

INSTALL(TARGETS simol-statphys ARCHIVE DESTINATION lib)

我对 simol-core (34%) 和 simol-quantchem (36%) 有类似的命令。我可以理解为什么要构建以前的目标(arpack、boost、eigen、yamlcpp),因为软件的模块依赖于这些外部库。但它们不依赖于测试。反之亦然:测试显然依赖于模块。但对我来说,为什么他们应该参与安装步骤是没有意义的。当然,没有调用 INSTALL 命令进行测试。这些测试只是这样定义的:

ADD_EXECUTABLE(test_galerkin ${CMAKE_SOURCE_DIR}/test/functional/statphys/galerkin/TestGalerkin.cpp) 
TARGET_LINK_LIBRARIES(test_galerkin simol-statphys)

有人知道这里发生了什么吗?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    CMake 不跟踪已安装目标与其构建对等对象之间的依赖关系。相反,整个 install(伪)目标依赖于 all 一个。

    因此,在make all 期间构建的任何内容也都在make install 上构建。

    如果您不想在 make install 上构建测试,请将它们从 make all 中排除。最简单的方法是在add_executable() 调用中使用选项EXCLUDE_FROM_ALL

    ADD_EXECUTABLE(test_galerkin EXCLUDE_FROM_ALL ...)
    

    【讨论】:

      猜你喜欢
      • 2015-11-18
      • 2016-09-23
      • 2021-06-02
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多