Dies kann mit den folgenden Schritten reproduziert werden:
- Klonen Sie ein Repository, zum Beispiel Hiredis.
- Erstellen Sie es mit CMake.
- Führen Sie chmod -R aus g+rw im Build-Verzeichnis.
- Benutzer austauschen und erneut versuchen, es zu erstellen.
Code: Select all
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)
Code: Select all
CONFIGURE_FILE(hiredis.pc.in hiredis.pc @ONLY)
Irgendwelche Ideen oder andere Setups, die Sinn machen könnten? Ich habe darüber nachgedacht, das Repository in das Konto jedes Benutzers zu klonen, aber das würde viel Zeit in Anspruch nehmen, da unser Repository ziemlich groß ist.
Der Grund für die Erstellung mit unterschiedlichen Benutzern liegt darin, dass wir bei der Arbeit eine gemeinsame Entwicklungsmaschine mit einem Benutzerkonto für jeden Entwickler haben, die über die zum Testen erforderliche Hardware verfügt. Wir klonen unser Repository in das Home-Verzeichnis eines Hauptkontos und fügen alle zur Gruppe des Hauptbenutzers hinzu, damit jeder Zugriff auf die Dateien hat.
Wir möchten das Repository nicht in das Home-Verzeichnis jedes Benutzers klonen, da das Repo ziemlich groß ist (ca. 40 GiB). Wir importieren mehrere Bibliotheken von Drittanbietern als Git-Submodule, und der CMake-Build gibt „Vorgang nicht zulässig für die Funktion configure_file() zurück, wenn versucht wird, als anderer Benutzer neu zu erstellen.
Ich habe hier einen ähnlichen Beitrag gefunden:
Make configure_file schlägt fehl, wenn es nicht vom Besitzer der Ausgabedatei ausgeführt wird
Der Vorschlag dort war, einfach ein Makro zu erstellen, das die löscht Dateien, was die Builds effektiv sauber macht.
Mobile version