Конфликт файлов при установке с CMake - PullRequest
0 голосов
/ 18 марта 2019

Мой проект производит несколько исполняемых файлов, которые я хочу установить.Мой установочный каталог примерно состоит из папки 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 попытаться установить несколько целей одновременно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...