cmake

2013-03-14 13 views
8

के साथ निर्माण के बाद libs को कॉपी या ले जाएं मेरे प्रोजेक्ट में एक फ़ोल्डर है जिसमें तृतीय पक्ष लाइब्रेरी (google test, zlib, ...) शामिल है। जब पुस्तकालयों को इन सभी पुस्तकालयों का निर्माण किया जाता है, तो मैं पुस्तकालयों को एक सामान्य फ़ोल्डर में रखना चाहता हूं। मैं इसे सेमेक के साथ करने की कोशिश कर रहा हूं लेकिन मुझे समस्याएं आ रही हैं। मैं इस कोड कोशिश कर रहा हूँ:cmake

add_subdirectory(gtest-1.6.0)  
add_custom_command(
      TARGET gtest_main 
      POST_BUILD 
      COMMAND ${CMAKE_COMMAND} -E copy ${SRC_LIB_DIR}/*.a ${DST_LIB_DIR}) 

मुझे लगता है कि समस्या हो सकती है कि लक्ष्य gtest में मुख्य इस स्तर पर है, लेकिन एक निचले स्तर

उत्तर

8

में परिभाषित नहीं है कि आप अपने CMakeLists में CMAKE_LIBRARY_OUTPUT_DIRECTORY चर सेट करते हैं। add_subdirectory पर कॉल करने से पहले txt (और सबप्रोजेक्ट इसे ओवरराइड नहीं करता है), पुस्तकालयों को सही जगह पर गिरना चाहिए।

इसके अतिरिक्त उपप्रोजेक्ट में लक्ष्य आउटपुट-फ़ाइल पर निर्भरता रखता है। जो आपकी प्रतिलिपि के साथ काम नहीं करेगा - लक्ष्य हमेशा पुराना होगा और इस प्रकार पुनर्निर्मित किया जाएगा।

संपादित करें: मैंने अनदेखा किया है कि आपकी कॉपी-कमांड एए फाइलों की प्रतिलिपि बना रही है और @ फ्रेज़र की टिप्पणी के लिए धन्यवाद, मैंने यह भी सीखा है कि CMAKE_ARCHIVE_OUTPUT_DIRECTORY को चाल करना चाहिए।

+0

काम नहीं करता है। यह कोड बनाना: SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY "$ {PROJECT_BINARY_DIR}/third_party/lib/release") और फिर gtest उपनिर्देशिका जोड़ना, कुछ भी नहीं करता है। पुस्तकालय हमेशा gtest निर्देशिका रूट पर जाते हैं। – Killrazor

+4

चूंकि gtest डिफ़ॉल्ट रूप से 'स्टेटिक' libs बनाता है, इसलिए आप ['CMAKE_ARCHIVE_OUTPUT_DIRECTORY'] (http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:ARCHIVE_OUTPUT_DIRECTORY) को सेट करना चाहते हैं 'CMAKE_LIBRARY_OUTPUT_DIRECTORY' जो 'साझा' libs के लिए है। – Fraser

+0

धन्यवाद फ्रेज़र और पैट्रिक। सीएमकेE_ARCHIVE_OUTPUT_DIRECTORY ने चाल की है। दोनों के लिए धन्यवाद !! – Killrazor