2011-11-22 19 views
5

मैं उबंटू के लिए एक साधारण गेम बना रहा हूं और हाईस्कॉर्क्स सूची को अपडेट करने के लिए, इसे रनटाइम पर एक फ़ाइल की आवश्यकता है, जिसे 'highscores.bin' कहा जाता है।मेकफ़ाइल में उपयोगकर्ता नाम कैसे प्राप्त करूं?

मैं

/home/(USER)/.game_name 

में इस फाइल को डाल करने के लिए मैं एक छोटे से शोध किया और पाया कि एक Makefile अंदर से मैं वातावरण चर $ उपयोगकर्ता आग्रह कर सकते हैं चाहता हूँ। तो Makefile में, इंस्टॉल लक्ष्य पर, मैं जोड़ दिया है:

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

लेकिन जब मैं रन 'sudo स्थापित करना', Makefile के रूप में यह स्थापित करता है:

/home/root/.game_name 

कैसे कर सकते हैं मुझे मेकफ़ाइल में (गैर रूट) उपयोगकर्ता नाम मिलता है?

पीएस .: मैं हाथ से मेकफ़ाइल लिख रहा हूं। कोई कॉन्फ़िगर

P.S.2: मैं न

mkdir -p ~/.game_name 

करने के लिए क्योंकि मैं अगर मैं एक अस्थायी निर्देशिका के लिए स्थापित करना चाहते हैं DESTDIR को बदलने में सक्षम होना चाहता हूँ चाहता हूँ।

+0

यह इंगित करने योग्य है कि किसी दिए गए उपयोगकर्ता के लिए होम-निर्देशिका '/ home/username' (उदा।'root' के homedir आमतौर पर 'root' है) - इसके बजाय' HOME' पर्यावरण-चर का उपयोग करें। – nickgrim

+0

Google पर खोजना इतना मुश्किल क्यों है? इस विशिष्ट परिदृश्य के बारे में चर्चा की कमी चिंताजनक है। –

उत्तर

11

ठीक है, अगर आप रनटाइम के दौरान उस फ़ाइल को चाहते हैं तो मैं अनुशंसा करता हूं कि आप इसे रनटाइम के दौरान बनाएं। मेकफ़ाइल केवल संकलन समय के दौरान माना जाता है। यह स्पष्ट रूप से एक समस्या है यदि प्रोग्राम संकलित किया गया है और फिर विभिन्न उपयोगकर्ताओं द्वारा निष्पादित किया गया है, जिनमें से कुछ संकलन समय पर भी मौजूद नहीं हो सकते हैं।

रनटाइम के दौरान आप here दिखाए गए अनुसार होम निर्देशिका प्राप्त कर सकते हैं (यदि आप सी/सी ++ का उपयोग कर रहे हैं)। फिर आप हाईस्कोर फ़ोल्डर/फ़ाइल के अस्तित्व की जांच कर सकते हैं और यदि आपको आवश्यकता हो तो इसे बनाएं। यदि आप सभी उपयोगकर्ताओं के लिए हाईस्कॉर फ़ाइल चाहते हैं, तो आपको इसे एक विशेष उपयोगकर्ता की होम निर्देशिका में रखना चाहिए, बल्कि फाइल सिस्टम में कहीं और। यह उदाहरण के लिए खेल xjump द्वारा किया जाता है।

और अपने Makefile के बारे में, $ उपयोगकर्ता चर पर

sudo sudo आदेश की वजह से रूट करने के लिए स्थापित कर

उपयोगकर्ता वास्तव में कर चल अनुवाद किया है सुपर उपयोगकर्ता है: जड़ ।

+0

उत्तर के लिए धन्यवाद! मैंने किसी अन्य उपयोगकर्ता को निष्पादित करने और 'hightscores.bin' फ़ाइल नहीं होने का सोचा नहीं है। लेकिन अगर मैं/usr/local/bin पर बाइनरी स्थापित करता हूं, तो सभी उपयोगकर्ताओं को इसका उपयोग होगा? – kure

+0

'/ usr/local/bin' आमतौर पर सामान्य उपयोगकर्ता द्वारा लिखने योग्य नहीं होता है, और इसमें केवल निष्पादन योग्य होना चाहिए। साझा किए गए स्कोर के साथ मेरे gentoo सिस्टम गेम पर उन्हें '/ var/games' में डाल दिया गया है (आपको इसे इंस्टॉल समय पर करने की आवश्यकता है, और फिर 'chmod 660; chgrp games', ताकि उपयोगकर्ता इसे अपडेट कर सकें) (और आपको इसे बनाना चाहिए पथ आसानी से बदल सकता है, क्योंकि अन्य वितरण में अलग-अलग निर्देशिका लेआउट हो सकते हैं) –

4

आप प्रत्येक प्रोग्राम के लिए अपना प्रोग्राम इंस्टॉल करना चाहते हैं? इसलिए यदि आप /home/user/.game_name निर्देशिका बनाते हैं तो उपयोगकर्ता बेहतर होता है, जब रूट इसे इंस्टॉल नहीं करता है। अन्यथा, केवल sudo make install पर कॉल करने वाले उपयोगकर्ता की उच्चस्क्रीन सूची होगी। यदि आपके पास केवल एक उपयोगकर्ता है, तो इसे सिस्टम-व्यापी इंस्टॉल न करें, लेकिन उपयोगकर्ता निर्देशिका में।

मैं पहले गेम पर उपयोगकर्ता फ़ाइलों प्रारंभ करने का सुझाव देता हूं। तो प्रत्येक उपयोगकर्ता, यहां तक ​​कि उपयोगकर्ता जो गेम स्थापित होने पर मौजूद नहीं थे, उनके उच्चस्क्रीन सूची हो सकती है। आप अपने गेम (सी ++, जावा या कुछ और) में प्रारंभिक कोड जोड़ सकते हैं या बस एक बाहरी स्क्रिप्ट को कॉल कर सकते हैं जो इसे करता है (इतना सुरुचिपूर्ण नहीं)। स्थापना समय पर उपयोगकर्ता से संबंधित फाइलें बनाने से बचें।

+0

धन्यवाद! यह पहली बार उपयोगकर्ता फ़ाइलों को बनाने के लिए बहुत समझ में आता है। मुझे खेद है कि मुझे पहले आपका जवाब नहीं समझा। – kure

संबंधित मुद्दे

 संबंधित मुद्दे