2011-11-22 217 views
5

我正在爲Ubuntu做一個簡單的遊戲並更新高分列表,它在運行時需要一個文件,名爲'highscores.bin'。如何獲取Makefile中的用戶名?

我希望把這個文件在

/home/(USER)/.game_name 

我研究了一點,發現從Makefile裏我能得到環境變量$ USER。 所以在Makefile文件,在「安裝」的目標,我已經添加了:

mkdir -p $(DESTDIR)home/$$USER/.game_name 

但是當我運行「須藤使安裝」,Makefile中安裝它:

/home/root/.game_name 

哪有我在Makefile中獲得(非根)用戶名?

P.S .:我正在手動編寫Makefile。沒有的./configure

P.S.2:我不想做

mkdir -p ~/.game_name 

,因爲我希望能夠改變DESTDIR如果我想安裝到一個臨時目錄。

+0

值得指出的是,不能保證給定用戶的主目錄位於'/ home/username'(例如,'root'的homedir通常是'/ root') - 改用'HOME'環境變量。 – nickgrim

+0

爲什麼地獄這麼難找到谷歌?缺乏關於這個具體情況的討論令人擔憂。 –

回答

11

那麼,如果你想在運行期間的文件,我會建議你在運行時創建它。 Makefile只在編譯期間被考慮。如果程序被編譯,然後由不同的用戶執行,這在編譯時甚至可能不存在,這顯然是一個問題。

在運行期間,您可以獲取主目錄,如圖所示here(如果您使用的是C/C++)。然後,您可以檢查高分檔文件夾/文件的存在並在需要時創建它。如果您想爲所有用戶創建一個高分檔案文件,您應該將其放在特殊用戶的主目錄中,而不是放在文件系統中的其他位置。這例如通過遊戲xjump完成。

以及您的Makefile中,$ USER變量,編譯因爲

須藤須藤命令的根使安裝

用戶實際運行make是超級用戶:根。

+0

感謝您的回答!我沒有想到另一個用戶執行它,並沒有'hightscores.bin'文件。但是,如果我在/ usr/local/bin安裝二進制文件,所有用戶都可以訪問它? – kure

+0

'/ usr/local/bin'通常不能被普通用戶寫入,它只能包含可執行文件。在我的gentoo系統中,共享分數的遊戲將它們放在'/ var/games'中(你需要在安裝時執行它,然後使用'chmod 660; chgrp games',這樣用戶可以更新它)路徑很容易改變,因爲其他發行版可能有不同的目錄佈局) –

4

您想爲每個用戶安裝程序嗎?所以最好是在用戶運行遊戲時創建目錄,而不是在root用戶安裝遊戲時創建目錄。否則,只有撥打sudo make install的用戶纔會有高分列表。如果您只有一個用戶,請不要將其安裝在系統範圍內,而是安裝在用戶目錄中。

我建議在遊戲第一次運行時初始化用戶文件。因此,每個用戶,甚至是安裝遊戲時不存在的用戶,都可以擁有他們的高分列表。您可以將初始化代碼添加到遊戲中(C++,java或其他任何東西),或者只是調用一個外部腳本(不是那麼優雅)。避免在安裝時創建與用戶相關的文件。

+0

謝謝!在第一次運行時創建用戶文件非常有意義。對不起,我一開始並不理解你的答案。 – kure