मैं 'बिन' डायर में सीएमके आउटपुट कैसे बनाऊँ?


187

मैं वर्तमान में एक प्लगइन संरचना के साथ एक परियोजना का निर्माण कर रहा हूँ। मैं प्रोजेक्ट को संकलित करने के लिए CMake का उपयोग कर रहा हूं। प्लगइन्स को अलग-अलग निर्देशिकाओं में संकलित किया गया है। मेरी समस्या यह है कि CMake स्रोत की निर्देशिका संरचना में बायनेरिज़ और प्लगइन्स, डायनेमिक लाइब्रेरीज़ को संकलित और सहेजता है। मैं एक ./bin निर्देशिका की तरह सीएमके फ़ाइलों को कैसे सहेज सकता हूं ?

जवाबों:


299

ओलेग के जवाब के रूप में, मेरा मानना है कि सेट करने के लिए सही चर रहा है CMAKE_RUNTIME_OUTPUT_DIRECTORY । हम अपने मूल CMakeLists.txt में निम्नलिखित का उपयोग करते हैं:

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)

आप प्रति-लक्ष्य के आधार पर आउटपुट निर्देशिका भी निर्दिष्ट कर सकते हैं:

set_target_properties( targets...
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

दोनों ही मामलों में आप जोड़ सकते हैं _[CONFIG]चर / संपत्ति नाम को आउटपुट निर्देशिका एक विशिष्ट विन्यास (विन्यास के लिए मानक मूल्यों के लिए लागू करने के लिए DEBUG, RELEASE, MINSIZERELऔर RELWITHDEBINFO)।


8
आप RUNTIME_OUTPUT_DIRECTORY लक्ष्य संपत्ति सेट करके इसे प्रति-लक्ष्य के आधार पर भी ओवरराइड कर सकते हैं। यहाँ देखें प्रलेखन: cmake.org/cmake/help/…
DLRdave

4
DLRdave की लिंक मृत है। प्रयास करें cmake.org/cmake/help/v2.8.8/...
निकु Stiurca

इसे एक ही बार में सभी कॉन्फ़िगरेशन पर कैसे लागू किया जाए?
इमलाई

पहले तीन कमांड सभी कॉन्फ़िगरेशन (विशेष रूप से CMAKE_RUNTIME_OUTPUT_DIRECTORY को सेट करना) पर लागू होना चाहिए। यदि आप डिबग आउटपुट के लिए एक अलग निर्देशिका चाहते हैं तो आप केवल CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG (उदाहरण के लिए) सेट करेंगे। सटीक व्यवहार जनरेटर / टूलकिन पर निर्भर करता है जिसका आप उपयोग कर रहे हैं (उदाहरण के लिए विजुअल स्टूडियो प्रोजेक्ट फाइलों में एक बिल्ड ट्री में सभी कॉन्फ़िगरेशन शामिल हैं, जबकि मेकफाइल जनरेटर केवल एक बिल्ड कॉन्फ़िगरेशन के लिए मेकफाइल्स उत्पन्न करेगा)।
एडम बोवेन

1
सेटिंग का उद्देश्य क्या है CMAKE_ARCHIVE_OUTPUT_DIRECTORY, यह देखते हुए कि कमांड install(TARGETS <target_name>)अभी भी "निष्पादन योग्य लक्ष्य के लिए कोई समय निर्धारण नहीं" के बारे में शिकायत करता है? यह चर निश्चित रूप से एक डिफ़ॉल्ट मान प्रदान करता है, इसलिए installकमांड को अनुपस्थिति की शिकायत नहीं करनी चाहिए RUNTIME DESTINATION
थियागॉफ़ेक्स

30

उपयोग set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")


10
चर मान के रूप में निर्देशिका में पूर्ण पथ नाम का उपयोग करें, और मूल्य में एक अनुगामी "/" न डालें ... जैसा कि एडम बोवेन के जवाब में है।
DLRdave

4
आपको पूर्ण पथ जोड़ने की आवश्यकता क्यों है? जब आप अपने प्रोजेक्ट को आगे
बढ़ाते हैं

8

EXECUTABLE_OUTPUT_PATHआवश्यक पथ सेट करने के लिए CMake चर का उपयोग करें । विवरण के लिए, ऑनलाइन CMake प्रलेखन देखें:

सीएमके 2.8.8 प्रलेखन


15
EXECUTABLE_OUTPUT_PATH अभी भी काम करता है, लेकिन इस परिणाम को प्राप्त करने का "पुराना" तरीका है। एडम बोवेन का उत्तर अनुशंसित दृष्टिकोण है।
DLRdave

4

मेरे लिए मैं cmake 3.5 का उपयोग कर रहा हूं, नीचे ( set variable) काम नहीं करता है:

set(
      ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)

लेकिन यह काम करता है ( set set_target_properties):

set_target_properties(demo5
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)

2
मैं सेट (CMAKE _...) के साथ एडम के उत्तर का उपयोग कर रहा हूं और यह काम करता है, लेकिन केवल जब आप इसे पुस्तकालयों, निष्पादनों आदि को जोड़ने से पहले करते हैं, तो मुझे लगता है कि यह मेरे जैसे शुरुआती लोगों के लिए एक महत्वपूर्ण नोट है।
ashrasmun

वाह। @ आश्रम ने मुझे कुछ घंटों के बाद पागल होने से बचा लिया। पूरी तरह से कुछ भी काम नहीं कर रहा था जब तक कि यह पता नहीं चला कि इन आदेशों का क्रम बहुत प्रासंगिक है।
आर्थ्रोपॉड

2
$ cat CMakeLists.txt
project (hello)
set(EXECUTABLE_OUTPUT_PATH "bin")
add_executable (hello hello.c)

1

हिन्दी मेरी मातृभाषा नहीं है; टाइपिंग त्रुटियों को क्षमा करें।

इस लाइन विन्यास का उपयोग करें:
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/)
अपने किसी भी CMakeLists.txt प्रोजेक्ट को रखें।
यह $ {PROJECT_SOURCE_DIR} आपकी वर्तमान स्रोत निर्देशिका है जहाँ परियोजना स्थान है।
और अगर भटकना है तो $ {EXECUTABLE_OUTPUT_PATH}
इस फ़ाइल की जाँच करें CMakeCache.txtतो कुंजी शब्द खोजें output path,
सभी चर यहाँ परिभाषित करते हैं, यह परियोजना का पूरा विवरण देगा setting·



0

भले ही मैं इसे मुख्य CMakeLists.txt में या अलग-अलग लोगों में परिभाषित करता हूं, फिर भी यह मानता है कि मुझे मुख्य पथ से सभी कामेच्छा और डिब्बे चाहिए, जो सभी की सबसे कम उपयोगी धारणा है।


0

इसमें जोड़ने के लिए:

यदि आप Visual Studio समाधान बनाने के लिए CMAKE का उपयोग कर रहे हैं, और आप विज़ुअल स्टूडियो को संकलित फ़ाइलों को / बिन में आउटपुट करना चाहते हैं , तो पीटर के उत्तर को थोड़ा संशोधित करने की आवश्यकता है:

# set output directories for all builds (Debug, Release, etc.)
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
    string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
    set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_SOURCE_DIR}/lib )
    set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_SOURCE_DIR}/lib )
    set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_SOURCE_DIR}/bin )
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.