2017-01-04 9 views
9

मैं अपने उपयोगकर्ताओं को स्थापित करने और अपने आवेदन को अनइस्टॉल करने में सक्षम बनाने के लिए कुछ sudo-मुक्त समाधान खोजने का प्रयास कर रहा हूं। का उपयोग करते हुएसीएमके समर्थन "अनइंस्टॉल करें"?

set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/opt/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}/") 
SET(CMAKE_INSTALL_RPATH "$ENV{HOME}/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}/") 

मैं उपयोगकर्ता के घर निर्देशिका में फ़ाइलें प्रत्यक्ष कर सकते हैं, और

make install 

ठीक काम करता है। What's the opposite of 'make install', ie. how do you uninstall a library in Linux? के संदर्भ में मुझे कोई विचार नहीं मिला, जो sudo-मुक्त है और गैर-सिस्टम-व्यवस्थापक व्यक्ति के लिए जटिल नहीं है।

  1. क्या कोई भी make uninstall सीएमके द्वारा समर्थित है?

  2. मेरा अनइंस्टॉल काफी सरल है: सभी फ़ाइलें उपयोगकर्ता के घर की उपनिर्देशिका में जाती हैं। सिद्धांत रूप में, हटा दिया गया है कि नई उपनिर्देशिका समस्या को हल कर सकती है। make install है, उपरोक्त पैरामीटर के साथ, किसी भी दुष्प्रभाव के साथ, या मैं अपने उपयोगकर्ता की मार्गदर्शिका में लिख सकता हूं कि नव निर्मित उपनिर्देशिका को 'अनइंस्टॉल' के रूप में हटाया जा सकता है?

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/19921017/cleaning-cmake-installed-files – usr1234567

+1

[संभावित सीएमके स्थापित फाइलों की सफाई] का संभावित डुप्लिकेट (https: // stackoverflow।कॉम/प्रश्न/19921017/सफाई-सेमेक-स्थापित-फाइलें) –

उत्तर

6

कोई नहीं है। FAQ from CMake wiki में देखें:

डिफ़ॉल्ट रूप से, CMake, "स्थापना रद्द करना" लक्ष्य प्रदान नहीं करता है तो आप ऐसा नहीं कर सकते। हम सिस्टम से उपयोगी फ़ाइलों को हटाने के लिए "अनइंस्टॉल करें" नहीं चाहते हैं।

यदि आप अपनी परियोजना में "अनइंस्टॉल करें" लक्ष्य चाहते हैं, तो तो कोई भी आपको एक प्रदान करने से रोकता है। आपको install_manifest.txt फ़ाइल में सूचीबद्ध फ़ाइलों को हटाने की आवश्यकता है। [कुछ उदाहरण कोड के बाद]

+0

मुझे यह देखकर खुशी हो रही है कि ऐसे लोग हैं जो विश्वास करते हैं कि अगर कोई विकास के दौरान फ़ाइल स्थापित करता है, तो यह हमेशा के लिए रहेगा। संकेत के लिए धन्यवाद, मैं उदाहरण कोड का उपयोग करूंगा। बीटीडब्लू: मुझे लगता है कि आपने मेरे # 2 प्रश्न का भी उत्तर दिया: फाइलों वाली निर्देशिका को हटाने से कोई साइड इफेक्ट नहीं होगा। – katang

13

आप एक स्थापना रद्द करें को लक्षित आप पर सरकारी CMake पूछे जाने वाले प्रश्न को एक बार देख ले सकते हैं जोड़ना चाहते हैं:

https://cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F

यदि आप बस सभी फ़ाइलों को अनइंस्टॉल करने का एक त्वरित तरीका चाहते हैं, तो बस चलाएं:

xargs rm < install_manifest.txt 

install_manifest.txt फ़ाइल तब बनाई जाती है जब आप make install चलाते हैं।

cat install_manifest.txt | sudo xargs rm 
cat install_manifest.txt | xargs -L1 dirname | sudo xargs rmdir -p 

दूसरा आदेश त्रुटियों की एक गुच्छा प्रिंट होगा क्योंकि यह रिकर्सिवली फ़ोल्डरों जब तक यह एक है कि खाली नहीं है पाता है हटाता है:

+1

लेकिन यह केवल उन फ़ाइलों को हटा देता है जो निर्देशिका नहीं हैं। यह ठीक है अगर आपके पास केवल शीर्षलेख और पुस्तकालय हैं लेकिन यदि आप एक पायथन पैकेज स्थापित करते हैं, तो आपको '/home/user/.local/miniconda3/envs/galario3/lib/python3.6/site-packages/galario/ जैसी निर्देशिकाएं बनाना होगा। '। सरल 'xargs ...' उन्हें हटा नहीं देता है, इसलिए आपको तर्क को मैन्युअल रूप से जोड़ना होगा, उदाहरण के लिए 'अनइंस्टॉल करें' लक्ष्य में –

1

फ़ाइलों और फ़ोल्डरों (खाली केवल) एक cmake परियोजना से make install से जोड़ा निकालें। मुझे यह त्रुटियां देखना पसंद है कि कौन से फ़ोल्डर्स छोड़े गए हैं। यदि आप इन त्रुटियों को छिपाना चाहते हैं तो आप --ignore-fail-on-non-empty को rmdir में जोड़ सकते हैं।