ऐसा लगता है कि आप स्रोत के निर्माण से बाहर चाहते हैं । ऐसे कुछ तरीके हैं जिनसे आप आउट ऑफ सोर्स बना सकते हैं।
तुम जो कर रहे थे, करो
cd /path/to/my/build/folder
cmake /path/to/my/source/folder
जो cmake एक उत्पन्न करने के लिए कारण होगा निर्माण पेड़ में /path/to/my/build/folder
के लिए स्रोत पेड़ में /path/to/my/source/folder
।
एक बार जब आप इसे बना लेते हैं, तो cmake याद रहता है कि स्रोत फ़ोल्डर कहां है - इसलिए आप बिल्ड ट्री पर cmake को फिर से जोड़ सकते हैं
cmake /path/to/my/build/folder
या और भी
cmake .
यदि आपकी वर्तमान निर्देशिका पहले से ही निर्मित फ़ोल्डर है।
3.13 या बाद के सीएमके के लिए, स्रोत को सेट करने और फ़ोल्डरों को बनाने के लिए इन विकल्पों का उपयोग करें
cmake -B/path/to/my/build/folder -S/path/to/my/source/folder
पुराने सीएमके के लिए, स्रोत को सेट करने और फ़ोल्डर बनाने के लिए कुछ अनजाने विकल्पों का उपयोग करें :
cmake -B/path/to/my/build/folder -H/path/to/my/source/folder
जो (1) के समान ही काम करेगा, लेकिन वर्तमान कार्य निर्देशिका पर निर्भरता के बिना।
CMake डिफ़ॉल्ट रूप से बिल्ड ट्री में अपने सभी आउटपुट डालता है , इसलिए जब तक आप उदारतापूर्वक ${CMAKE_SOURCE_DIR}
या ${CMAKE_CURRENT_SOURCE_DIR}
अपने cmake फ़ाइलों में उपयोग नहीं कर रहे हैं, तब तक यह आपके स्रोत पेड़ को नहीं छूना चाहिए ।
सबसे बड़ी बात जो गलत हो सकती है वह यह है कि अगर आपने पहले अपने स्रोत के पेड़ में एक बिल्ड ट्री जनरेट किया है (यानी आपके पास सोर्स बिल्ड में है)। एक बार जब आप इसे (1) के दूसरे भाग में kicks के ऊपर कर लेते हैं, और cmake स्रोत में कोई बदलाव नहीं करता है या स्थानों का निर्माण नहीं करता है। इस प्रकार, आप इन-सोर्स बिल्ड के साथ सोर्स डायरेक्टरी के लिए आउट-ऑफ-सोर्स बिल्ड नहीं बना सकते । आप CMakeCache.txt
स्रोत निर्देशिका से (न्यूनतम पर) निकालकर इसे आसानी से ठीक कर सकते हैं । कुछ अन्य फाइलें (अधिकतर CMakeFiles
निर्देशिका में) हैं जो सीएमके उत्पन्न करती हैं कि आपको भी हटा देना चाहिए, लेकिन ये सीमेक को स्रोत वृक्ष का निर्माण पेड़ के रूप में नहीं करेंगे।
चूंकि आउट-ऑफ-सोर्स बिल्ड अक्सर इन-सोर्स बिल्ड की तुलना में अधिक वांछनीय होते हैं, आप सोर्स बिल्ड से बाहर की आवश्यकता के लिए अपने cmake को संशोधित करना चाह सकते हैं:
# Ensures that we do an out of source build
MACRO(MACRO_ENSURE_OUT_OF_SOURCE_BUILD MSG)
STRING(COMPARE EQUAL "${CMAKE_SOURCE_DIR}"
"${CMAKE_BINARY_DIR}" insource)
GET_FILENAME_COMPONENT(PARENTDIR ${CMAKE_SOURCE_DIR} PATH)
STRING(COMPARE EQUAL "${CMAKE_SOURCE_DIR}"
"${PARENTDIR}" insourcesubdir)
IF(insource OR insourcesubdir)
MESSAGE(FATAL_ERROR "${MSG}")
ENDIF(insource OR insourcesubdir)
ENDMACRO(MACRO_ENSURE_OUT_OF_SOURCE_BUILD)
MACRO_ENSURE_OUT_OF_SOURCE_BUILD(
"${CMAKE_PROJECT_NAME} requires an out of source build."
)
उपरोक्त मैक्रो आमतौर पर उपयोग किए जाने वाले मॉड्यूल से आता है जिसे कहा जाता है MacroOutOfSourceBuild
। MacroOutOfSourceBuild.cmake
Google पर इसके लिए कई स्रोत हैं लेकिन मैं मूल को ढूंढ नहीं पा रहा हूं और यहां पूर्ण रूप से शामिल करना काफी कम है।
दुर्भाग्य से सीमेक ने आमतौर पर मैक्रो को लागू करने के समय तक कुछ फाइलें लिखी हैं, इसलिए हालांकि यह आपको वास्तव में निर्माण करने से रोक देगा, जिसे आपको अभी भी हटाना होगा CMakeCache.txt
और CMakeFiles
।
आपको उन रास्तों को सेट करने के लिए उपयोगी हो सकता है जो बायनेरिज़, साझा और स्टैटिक लाइब्रेरीज़ को लिखे गए हैं - किस स्थिति में मैं एक 'बिन' डायर में सेमीकेक आउटपुट कैसे बनाऊँ? (अस्वीकरण, मेरे पास उस प्रश्न पर शीर्ष मतदान का उत्तर है ... लेकिन यह है कि मुझे इसके बारे में कैसे पता है)।
CMAKE_BINARY_DIR
CMAKE_CACHEFILE_DIR
set()
cd Compile; rm -rf *; cmake ../src