Это можно воспроизвести с помощью следующих шагов:
- Клонировать репозиторий, например, Hiredis.
- Создайте его с помощью CMake.
- Запустите chmod g+rw в каталоге сборки.
- Поменяйте местами пользователей и попробуйте собрать заново.
Код: Выделить всё
CMake Error at 3rd_party/hiredis/CMakeLists.txt:70 (CONFIGURE_FILE):
Operation not permitted
CMake Error at /usr/local/share/cmake-3.31/Modules/WriteBasicConfigVersionFile.cmake:64 (configure_file):
Operation not permitted
Call Stack (most recent call first):
/usr/local/share/cmake-3.31/Modules/CMakePackageConfigHelpers.cmake:402 (write_basic_config_version_file)
3rd_party/hiredis/CMakeLists.txt:134 (write_basic_package_version_file)
Код: Выделить всё
CONFIGURE_FILE(hiredis.pc.in hiredis.pc @ONLY)
Есть какие-нибудь идеи или другие настройки, которые могут иметь смысл? Я думал о клонировании репозитория в учетную запись каждого пользователя, но это заняло бы много времени, поскольку наш репозиторий довольно большой.
Причина создания с участием разных пользователей заключается в том, что у нас есть общая машина разработки с учетной записью пользователя для каждого разработчика, на которой есть оборудование, необходимое для тестирования. Мы клонируем наш репозиторий в домашний каталог основной учетной записи и добавляем всех в группу основного пользователя, чтобы каждый имел доступ к файлам.
Мы не хотим клонировать репозиторий в домашний каталог каждого пользователя, поскольку репозиторий довольно большой (около 40 ГиБ). Мы импортируем несколько сторонних библиотек в виде подмодулей git, и сборка CMake возвращает операцию «Операция не разрешена» для функции configure_file() при попытке пересобрать от имени другого пользователя.
Я нашел здесь похожее сообщение:
Make configure_file завершается с ошибкой, если он не запускается владельцем выходного файла
Было предложено просто создать макрос, который удаляет файлы, что эффективно очищает сборки.
Подробнее здесь: https://stackoverflow.com/questions/798 ... iple-users
Мобильная версия