Nun, wenn Sie diese Datei während der Laufzeit haben möchten, würde ich empfehlen, dass Sie sie während der Laufzeit erstellen. Das Makefile wird nur während der Kompilierzeit berücksichtigt. Dies ist offensichtlich ein Problem, wenn das Programm kompiliert und dann von verschiedenen Benutzern ausgeführt wird, von denen einige zum Zeitpunkt des Kompilierens möglicherweise noch nicht einmal vorhanden sind.
Während der Laufzeit können Sie das Home-Verzeichnis wie hier gezeigt abrufen (wenn Sie C/C++ verwenden). Dann können Sie die Existenz des Highscore-Ordners/der Highscore-Datei überprüfen und bei Bedarf erstellen. Wenn Sie eine Highscore-Datei für alle Benutzer haben möchten, sollten Sie diese in das Home-Verzeichnis eines bestimmten Benutzers legen, aber lieber an einer anderen Stelle im Dateisystem. Das macht zum Beispiel das Spiel xjump.
Und in Bezug auf Ihr Makefile wird die $USER-Variable wegen des sudo in root übersetzt Befehl auf
sudo make install
Der Benutzer, der make tatsächlich ausführt, ist der Superuser:root.
Sie möchten Ihr Programm für alle Benutzer installieren? Es ist also besser, wenn Sie den /home/user/.game_name erstellen Verzeichnis, wenn der Benutzer das Spiel ausführt, nicht wenn root es installiert. Ansonsten nur der Benutzer, der sudo make install
anruft wird seine Highscore-Liste haben. Wenn Sie nur einen Benutzer haben, installieren Sie diesen nicht systemweit, sondern im Benutzerverzeichnis.
Ich schlage vor, Benutzerdateien zu initialisieren beim ersten Lauf des Spiels. So kann jeder Benutzer, auch Benutzer, die bei der Installation des Spiels noch nicht existierten, ihre Highscore-Liste haben. Sie können den Initialisierungscode in Ihr Spiel einfügen (C++, Java oder irgendetwas anderes) oder einfach ein externes Skript aufrufen, das dies tut (nicht so elegant). Vermeiden Sie es, während der Installation benutzerbezogene Dateien zu erstellen.