का उपयोग कर 32-बिट बनाम 64-बिट प्रोजेक्ट को संकलित करना मैं कैसे निर्दिष्ट करूं कि लक्ष्य को 32-बिट या 64-बिट के आधार पर अलग-अलग link_directories
मान का उपयोग करना चाहिए? उदाहरण के लिए, 32-बिट बाइनरी को 32-बिट बूस्ट से लिंक करने की आवश्यकता है, 64-बिट बाइनरी को 64-बिट बूस्ट से लिंक करने की आवश्यकता है।सीएमके
सीएमके
उत्तर
आप इन पंक्तियों
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(BOOST_LIBRARY "/boost/win64/lib")
else(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(BOOST_LIBRARY "/boost/win32/lib")
endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(CMAKE_EXE_LINKER_FLAGS ${BOOST_LIBRARY})
बूस्ट के लिए विशेष रूप से साथ कुछ करना है, तो आप
FIND_LIBRARY(Boost 1.44 COMPONENTS ...)
का उपयोग करना चाहिए तब CMake चर Boost_LIBRARY_DIRS सही पुस्तकालय पथ है, जो स्थापित किया जाना है में शामिल होंगे LINK_DIRECTORIES का उपयोग करना, उदाहरण के लिए
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
अधिकतर सामान्य मामले को सही ढंग से user434507 के जवाब में वर्णित है।
मुझे पता है कि यह काफी पुराना सवाल है। लेकिन जब आप Google "cmake 32 64" के साथ खोज करते हैं तो यह अभी भी शीर्ष पर है। मैं user434507 के जवाब के लिए इसी तरह का जवाब है, लेकिन एक छोटा सा मेरी राय में अधिक पठनीय (मैं cmake में अगर-बाकी निर्माण पसंद नहीं है, यह बदसूरत दिखता है):
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
set(BOOST_LIBRARY "/boost/win${BITS}/lib")
set(CMAKE_EXE_LINKER_FLAGS ${BOOST_LIBRARY})
यह/बढ़ावा के लिए BOOST_LIBRARY
पथ इंगित करेगा/जीत/lib या/boost/win/lib, आपके आर्किटेक्चर के आधार पर।
त्रुटि: निर्माण में सीएमके त्रुटि।सेमीकेक: 27 (गणित): गणित अभिव्यक्ति को पार्स नहीं कर सकता: "8 *": वाक्यविन्यास त्रुटि, अप्रत्याशित $ अंत, exp_OPENPARENT या exp_NUMBER (2) –
की अपेक्षा दूसरी पंक्ति में TINY त्रुटि है। {$ BITS} नहीं बल्कि $ {BITS}। ब्रैकेट से पहले $ संकेत। – Nick
रोमिनफ के आधार पर मैंने निम्नलिखित समाधान (विंडोज़ के लिए) चालू किया। C: मैं में बढ़ावा पुस्तकालयों स्थापित \ Boost_32 और C: \ Boost_64
CMakeLists.txt में
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
set(BOOST_ROOT C:/Boost_${BITS})
find_package(Boost 1.64.0 COMPONENTS ...)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR} )
LINK_DIRECTORIES(${Boost_LIBRARY_DIR})
स्पष्टीकरण:
CMAKE_SIZEOF_VOID_P
32 बिट मंच पर 4 के बराबर है, और 8 64 बिट मंच पर।- अभिव्यक्ति
8*${CMAKE_SIZEOF_VOID_P}
क्रमशः 32 या 64, का मूल्यांकन करेगा।- आप सशर्त, की जरूरत नहीं है (और मेरी CMakeLists में पहले से ही बहुत अधिक कर रहे हैं),
- यह 90% कैसे:
C:/Boost_${BITS}
C:/Boost_32
याC:/Boost_64
स्वतः
लाभ में बदल जाता है आपको सीएमके के साथ बूस्ट शामिल करना चाहिए।
- 1. सीएमके
- 2. सीएमके
- 3. सीएमके
- 4. सीएमके
- 5. सीएमके
- 6. सीएमके
- 7. सीएमके
- 8. सीएमके
- 9. सीएमके
- 10. सीएमके
- 11. सीएमके
- 12. सीएमके
- 13. सीएमके
- 14. सीएमके
- 15. सीएमके
- 16. सीएमके
- 17. सीएमके
- 18. सीएमके
- 19. सीएमके
- 20. सीएमके
- 21. सीएमके
- 22. सीएमके
- 23. सीएमके
- 24. सीएमके
- 25. सीएमके
- 26. सीएमके
- 27. सीएमके
- 28. मेकफ़ाइल सीएमके
- 29. सीएमके मॉड्यूल?
- 30. सीएमके ट्यूटोरियल
जैसा कि मार्टिन द्वारा निर्दिष्ट किया गया है, इसे बढ़ावा देने के लिए इसकी आवश्यकता नहीं है, लेकिन वैसे भी यह जानना अच्छा है। – tibur
सेमेक डेवलपर्स सिंटैक्स के हिस्से (...) के साथ क्या सोच रहे थे। बीटीडब्ल्यू अगर यह और नहीं है। मुझे एक पल के लिए भ्रमित कर दिया जब तक मुझे यह याद नहीं आया। नए सेमेक सिंटैक्स को ब्रैकेट में अन्य, एंडिफ सामान की आवश्यकता नहीं है। – Matt