2012-10-30 19 views
17

मैं एक सी ++ आधारित प्रणाली के लिए एक क्रॉस-प्लेटफार्म इंस्टॉलर बनाना चाहता हूं जिसे मैं बना रहा हूं।विंडोज पर सीएमके + सीपीएक्स + एनएसआईएस के साथ इंस्टॉलर कैसे बनाएं?

मैं सबकुछ बनाने के लिए सीएमके का उपयोग करता हूं, और अगर मैं इंस्टॉलर बनाने के लिए सीपीएक का उपयोग कर सकता तो यह बहुत अच्छा होगा। मेरे पास पहले से ही ओएसएक्स पर काम कर रहा है, लेकिन मैं इसे विंडोज पर काम नहीं कर सकता। चीजों को आसान बनाने के लिए, मैंने एनएसआईएस इंस्टॉलर सॉफ्टवेयर के साथ काम करने के लिए http://www.cmake.org/Wiki/CMake:Packaging_With_CPack पर उदाहरण प्राप्त करने का प्रयास किया। मुझे कॉन्फ़िगर करने के बाद कहीं भी एनएसआईएस इंस्टॉलर नहीं मिल रहा है (वीएस 2010 विन 64 जनरेटर के साथ)।

शायद मैं उलझन में हूं, लेकिन मैंने सोचा कि विजुअल स्टूडियो की आवश्यकता के बिना केवल स्रोत, सीएमके, सीपीएक्स और एनएसआईएस के साथ इंस्टॉलेशन पैकेज बनाना संभव होगा। क्या यह संभव है?

एक पूर्ण ट्यूटोरियल के लिए एक लिंक (http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack पर एक एनएसआईएस काम करने के लिए प्रासंगिक जानकारी पर छोड़ देता है और जेनरेटर या कंपाइलर्स का जिक्र नहीं करता है) बहुत उपयोगी होगा, या मूलभूत स्पष्टीकरण कि मैं इस पौराणिक कथाओं को कैसे प्राप्त कर सकता हूं जेनरेट एनएसआईएस इंस्टॉलर बहुत अच्छा होगा।

cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR) 
project(StPMS) 

add_library(mylib mylib.cpp) 

add_executable(mylibapp mylibapp.cpp) 
target_link_libraries(mylibapp mylib) 

install(TARGETS mylib 
    ARCHIVE 
    DESTINATION lib 
    COMPONENT libraries) 
install(TARGETS mylibapp 
    RUNTIME 
    DESTINATION bin 
    COMPONENT applications) 
install(FILES mylib.h 
    DESTINATION include 
    COMPONENT headers) 

set(CPACK_GENERATOR NSIS) 
set(CPACK_PACKAGE_NAME "MyLib") 
set(CPACK_PACKAGE_VENDOR "CMake.org") 
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyLib - CPack Component Installation Example") 
set(CPACK_PACKAGE_VERSION "1.0.0") 
set(CPACK_PACKAGE_VERSION_MAJOR "1") 
set(CPACK_PACKAGE_VERSION_MINOR "0") 
set(CPACK_PACKAGE_VERSION_PATCH "0") 
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CPack Component Example") 
SET(CPACK_NSIS_MODIFY_PATH ON) 

INCLUDE(CPack) 

उत्तर

26

... मैंने सोचा कि यह एक मात्र स्रोत, CMake, CPack, और NSIS बिना किसी के साथ स्थापना पैकेज बनाने के लिए संभव हो जाएगा:

यहाँ ऊपर के उदाहरण के लिए CMakeLists.txt है विजुअल स्टूडियो की आवश्यकता है। क्या यह संभव है?

तरह। यह "विजुअल स्टूडियो की आवश्यकता के बिना" आपके द्वारा क्या मतलब है इस पर निर्भर करता है। वास्तव में lib और exe बनाने के लिए आपको एक बिल्ड टूल की आवश्यकता है। विंडोज़ पर, आपको विजुअल स्टूडियो के एमएसबिल्ड जैसे कुछ चाहिए, खासकर यदि आपने जनरेटर के रूप में "Visual Studio 10 Win64" निर्दिष्ट किया है।

यदि आपका मतलब है "विजुअल स्टूडियो चलाने के बिना", तो उत्तर हाँ है। आप --build तर्क का उपयोग कर अपने चुने हुए बिल्ड टूल को सीएमके निष्पादित कर सकते हैं।

सीएमके चलाने के बाद, आप अपनी बिल्ड निर्देशिका में PACKAGE.vcxproj फ़ाइल के साथ समाप्त होते हैं। यह ऐसा निर्माण कर रहा है जो इंस्टॉलर बनायेगा। आप दृश्य स्टूडियो के अंदर से पैकेज परियोजना का निर्माण कर सकते हैं, या आप ऐसा करके सीधे MSBuild आह्वान कर सकते हैं:

msbuild /P:Configuration=Release PACKAGE.vcxproj 
अपने निर्माण निर्देशिका से

एक वी.एस. कमांड प्रॉम्प्ट में।

यह आपके बिल्डर निर्देशिका में भी MyLib-1.0.0-win64.exe नामक आपके इंस्टॉलर को उपज देना चाहिए।


तुम सिर्फ CMake का उपयोग करना चाहते हैं, तो MSBuild लागू करने के लिए एक विकल्प है:

cmake --build . --target PACKAGE.vcxproj --config Release 


या आप पहले समाधान का निर्माण कर सकते हैं, तो CPack आह्वान संस्थापक बनाने के लिए:

cmake --build . --config Release 
cpack -C Release 
+2

बिल्कुल सही। वीएस का उपयोग करने के बिंदु पर पहुंचने के बाद मुझे क्या करना चाहिए इसके बारे में कोई सुसंगत दस्तावेज नहीं मिला। मैं वास्तव में सहायता के लिए आभारी हूं! – sklum

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