使用CMake安装软件时的虚假目标

时间:2016-06-22 15:54:19

标签: cmake

我写了一个软件,其配置,构建和安装是通过一些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)

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

1 个答案:

答案 0 :(得分:1)

CMake 不会跟踪已安装目标与已构建对抗对象之间的依赖关系。相反,整个安装(伪)目标取决于所有目标。

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

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

ADD_EXECUTABLE(test_galerkin EXCLUDE_FROM_ALL ...)