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