使用CMake安装文件冲突

时间:2019-03-18 15:09:57

标签: cmake installation

我的项目产生了几个我想安装的可执行文件。我的安装目录大致由用于可执行文件的bin文件夹和用于安装这些可执行文件的依赖项(lib文件)的.so文件夹组成。

通过调用cmake_install.cmake脚本,将每个可执行文件作为其自定义目标安装。

add_custom_target(target_install
  ${CMAKE_COMMAND}
  -D "BUILD_TYPE=${CMAKE_BUILD_TYPE}"
  -D "CMAKE_INSTALL_COMPONENT=${target_component}"
  -P "cmake_install.cmake"
  COMMENT "Installing target..."
)

那些可执行文件大多具有相似的依赖关系(boost,...),当CMake尝试安装已安装的依赖关系时,通常会跳过它。 问题是当Cmake多任务安装这些可执行文件时。然后,它尝试同时安装它们的依赖项,这通常导致尝试在同一时间复制同一文件两次。这会导致错误并导致安装失败。

    -- Installing: lib/libboost_chrono.so
    -- Installing: lib/libboost_chrono.so
    -- Installing: lib/libboost_chrono.so.1.66.0
    -- Installing: lib/libboost_chrono.so.1.66.0
    -- Installing: lib/libboost_regex.so
    -- Installing: lib/libboost_regex.so
    -- Installing: lib/libboost_regex.so.1.66.0
    CMake Error at src/cmake_install.cmake:88 (file):
      file INSTALL cannot duplicate symlink "/usr/lib/libboost_regex.so" at
      "lib/libboost_regex.so".
    Call Stack (most recent call first):
      cmake_install.cmake:42 (include)
      "/home/docker/wkp/install/codebase/develop/ServeurIti/creb/lib/libboost_regex.so".
    Call Stack (most recent call first):
      cmake_install.cmake:42 (include)

如何避免CMake尝试同时安装多个目标?

0 个答案:

没有答案