Проблема с разрешениями CMake configure_file() при запуске несколькими пользователямиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема с разрешениями CMake configure_file() при запуске несколькими пользователями

Сообщение Anonymous »

При попытке перестроить проект CMake от имени другого пользователя Linux выдается сообщение «Операция не разрешена», несмотря на наличие доступа на чтение и запись через групповые разрешения. Единственный способ решить эту проблему — указать каталог сборки пользователю, который хочет выполнить сборку.
Это можно воспроизвести с помощью следующих шагов:
  • Клонировать репозиторий, например, 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)
Строка 70 файла Hiredis CMake:

Код: Выделить всё

CONFIGURE_FILE(hiredis.pc.in hiredis.pc @ONLY)
Я все еще не уверен, что понимаю причину проблемы. Я просмотрел документацию по функции configure_file() и обнаружил, что это просто оболочка для функции file(). Я пытался создать макрос для configure_file(), чтобы вызывать его с разными разрешениями, но это не сработало.
Есть какие-нибудь идеи или другие настройки, которые могут иметь смысл? Я думал о клонировании репозитория в учетную запись каждого пользователя, но это заняло бы много времени, поскольку наш репозиторий довольно большой.
Причина создания с участием разных пользователей заключается в том, что у нас есть общая машина разработки с учетной записью пользователя для каждого разработчика, на которой есть оборудование, необходимое для тестирования. Мы клонируем наш репозиторий в домашний каталог основной учетной записи и добавляем всех в группу основного пользователя, чтобы каждый имел доступ к файлам.
Мы не хотим клонировать репозиторий в домашний каталог каждого пользователя, поскольку репозиторий довольно большой (около 40 ГиБ). Мы импортируем несколько сторонних библиотек в виде подмодулей git, и сборка CMake возвращает операцию «Операция не разрешена» для функции configure_file() при попытке пересобрать от имени другого пользователя.
Я нашел здесь похожее сообщение:

Make configure_file завершается с ошибкой, если он не запускается владельцем выходного файла

Было предложено просто создать макрос, который удаляет файлы, что эффективно очищает сборки.

Подробнее здесь: https://stackoverflow.com/questions/798 ... iple-users
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»