2010-08-23 16 views
21

क्या add_subdirectory के साथ जोड़े गए निर्देशिकाओं में परिभाषित लक्ष्यों के साथ इंस्टॉल (TARGETS ...) का उपयोग करना संभव है?इंस्टॉल करें (TARGETS ...) और add_subdirectory

मेरा उपयोग मामला है, कि मैं gtest के लिए e.gg एक आरपीएम बनाना चाहता हूं। gtest प्रोजेक्ट में किसी भी इंस्टॉल स्टेटमेंट के बिना CMakeLists.txt होता है। मैं gtest के CMakeLists.txt पर उन बयानों को जोड़ने के बिना पैकेज बनाना चाहता हूं।

मैं इस जिसके परिणामस्वरूप निर्देशिका संरचना है:

+ gtest-1.5.0/... 
+ CMakeLists.txt 

gtest-1.5.0 के CMakeLists इस तरह पुस्तकालयों परिभाषित करता है:

cxx_static_library(gtest "${cxx_strict}" src/gtest-all.cc) 
cxx_static_library(gtest_main "${cxx_strict}" src/gtest_main.cc) 
target_link_libraries(gtest_main gtest) 

अब मैं अपने CMakeLists को कुछ इस तरह जोड़ना चाहते हैं। txt:

add_subdirectory(gtest-1.5.0) 
install(TARGETS gtest gtest_main ARCHIVE DESTINATION lib) 

लेकिन cmake सही ढंग से कहा गया है:

CMake Error at CMakeLists.txt:10 (install): 
    install TARGETS given target "gtest" which does not exist in this 
    directory. 

gtest-1.5.0 पैच किए बिना ऐसा करने का कोई तरीका है?

उत्तर

8

आप लक्ष्य इंस्टॉल करने के बजाय फ़ाइल इंस्टॉल का उपयोग करने का प्रयास कर सकते हैं। नकारात्मकता यह है कि आपको साझा और स्थैतिक निर्माण को संभालना होगा।

install(FILES gtest-1.5.0/gtest_main.so DESTINATION lib)

+0

ठीक .. यह काम कर सकता था, लेकिन मुझे समझ नहीं आता, मैं क्यों target_link_libraries में परिभाषित के नाम का इस्तेमाल कर सकते हैं और में आदेश स्थापित नहीं! – Gizmomogwai

+2

इंस्टॉल कमांड केवल लक्ष्य निर्देशिका को देखता है जब कोई लक्ष्य मौजूद है, लक्ष्य_लिंक_ पुस्तकालयों के विपरीत जो सभी लक्ष्यों को स्कैन करता है। – RobertJMaynard

+0

ठीक है ... स्पष्टीकरण के लिए धन्यवाद, मैंने ऐसा कुछ सोचा था, लेकिन मुझे यकीन नहीं था (क्या आप अपना इंस्टॉल संपादित कर सकते हैं (FILES कमांड, क्योंकि इंस्टॉल करें (FILES ARCHIVE पैरामीटर नहीं लेता है)। – Gizmomogwai

संबंधित मुद्दे