मैं सीएमके के शुरुआती उपयोगकर्ता हूं। मेरे पर्यावरण में कई परियोजनाएं हैं जैसे:सीएमके कई परियोजनाओं के लिए एक निर्माण निर्देशिका
project
|------ CMakeLists.txt (The main Cmake)
|------ ProjectA
| |----- .cpp files
| |----- .hpp files
| |----- CMakeList.txt
|------ ProjectB
| |----- .cpp files
| |----- .hpp files
| |----- CMakeList.txt
|
|------ build
| |----- CMakeStuff
|------ bin
| |---- executables
|------ lib
| |---- libwhatever.a
|------ db
|---- Database stuff
मैं ऊपर दिखाए गए अनुसार प्रत्येक परियोजना के लिए एक एकल निर्माण निर्देशिका का उपयोग करना चाहता हूं। पसंदीदा रूप से इसे build/projectA
, build/ProjectB
जैसे कई उपप्रोजेक्ट्स में विभाजित किया जा सकता है ताकि अगर मुझे एक एकल प्रोजेक्ट का पुनर्निर्माण करने की आवश्यकता हो तो मैं पूरी build/Project
फ़ाइल को हटा सकता हूं और सब खत्म हो गया है और एक नया Cmake
इसे फिर से बनाएगा।
मुझे सीएमकेई को कॉन्फ़िगर करने में कठिनाइयां हो रही हैं।
प्रोजेक्ट फ़ोल्डर पर मेरे मूल CMakeList.txt:
cmake_minimum_required(VERSION 3.2.2.)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)
project(projectA)
set(CMAKE_BUILD_TYPE Debug)
file(GLOB SOURCES "*.cpp")
add_library(commonmessage SHARED ${SOURCES})
install(TARGETS commonmessage DESTINATION ../lib)
मेरे प्रश्न हैं:
ए) अगर मैं एक भी निर्माण निर्देशिका पर cmake चलाने क्या होगा - कि संभव है और क्या होगा सही सीएमकेई कॉन्फ़िगरेशन बनें?
बी) ProjectA
के लिए मेरा संकलन ProjectB
से फ़ाइलों को शामिल करने की आवश्यकता है - मैं प्रत्येक व्यक्तिगत परियोजना के लिए CMakeLists.txt
में इसे कैसे सेट कर सकता हूं?
सी) अंत में मुझे सभी को बनाने के लिए एक ही मेकफ़ाइल की आवश्यकता है, साथ ही प्रत्येक प्रोजेक्ट को व्यक्तिगत रूप से बनाने का विकल्प भी है। क्या यह एक एकल निर्माण निर्देशिका के साथ संभव होगा?
मदद के लिए धन्यवाद।
महोदय, मदद के लिए धन्यवाद ... यदि मुझे लक्ष्य फ़ोल्डर में lib और bin फ़ाइलों को उत्पन्न करने की आवश्यकता है तो क्या होगा 'इंस्टॉल करने' की आवश्यकता के बिना? – Mendes
जबकि 'CMAKE _ * _ OUTPUT_DIRECTORY' चर का उपयोग करके यह संभव है, मैं ऐसा करने की अनुशंसा नहीं करता, क्योंकि आपके पास कई कॉन्फ़िगरेशन (डीबग बनाम रिलीज, विभिन्न कंपाइलर इत्यादि) के साथ कई बिल्ड निर्देशिकाएं हो सकती हैं और यह हमेशा अच्छा होता है संकलन करते समय फ़ाइलों को ओवरराइट किए बिना समानांतर में उनका परीक्षण करने में सक्षम हो। आपको अपनी परियोजना की जड़ पर बिन/lib की आवश्यकता क्यों है? – SirDarius
अच्छा बिंदु। 'bin' वह है जहां सभी निष्पादन योग्य स्थापित किए जाएंगे। 'पुस्तकालय' सभी पुस्तकालयों को पकड़ेंगे। – Mendes