我写了一个软件,其配置,构建和安装是通过一些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)
有人知道这里发生了什么吗?
答案 0 :(得分:1)
CMake 不会跟踪已安装目标与已构建对抗对象之间的依赖关系。相反,整个安装(伪)目标取决于所有目标。
因此,在make all
期间构建的内容也在make install
上构建。
如果您不想在make install
上构建测试,请将其从make all
中排除。最简单的方法是在add_executable()
调用中使用选项 EXCLUDE_FROM_ALL :
ADD_EXECUTABLE(test_galerkin EXCLUDE_FROM_ALL ...)