set_target_properties(MyTarget PROPERTIES IMPORTED_LOCATION_RELEASE 
                       ${_IMPORT_PREFIX}/lib/mysharedlibrary.so)

उस साझा पुस्तकालय को जोड़ देगा। हालांकि, मैं कई साझा पुस्तकालयों को जोड़ना चाहता हूं।

मैंने निम्नलिखित की कोशिश की:

set_target_properties(MyTarget PROPERTIES IMPORTED_LOCATION_RELEASE 
                       "${_IMPORT_PREFIX}/lib/mysharedlibrary_1.so" 
                       "${_IMPORT_PREFIX}/lib/mysharedlibrary_2.so")

लेकिन ये काम नहीं करता.

1
Chani 13 नवम्बर 2019, 16:21
सीएमके में सूचियां केवल ";" से अलग तार हैं। "${_IMPORT_PREFIX}/lib/mysharedlibrary_1.so;${_IMPORT_PREFIX}/lib/mysharedlibrary_2.so" आज़माएं।
 – 
arrowd
13 नवम्बर 2019, 16:28
क्या आप कृपया प्रश्न के उत्तर और उस पर मेरी टिप्पणी पर एक नज़र डाल सकते हैं?
 – 
Chani
13 नवम्बर 2019, 16:40

2 जवाब

सबसे बढ़िया उत्तर

IMPORTED_LOCATION_RELEASE एकल फ़ाइल का स्थान निर्दिष्ट करता है। आप दो लक्ष्य बना सकते हैं और फिर उनके साथ लिंक कर सकते हैं:

add_library(mysharedlibrary_1 SHARED IMPORTED)
set_target_properties(mysharedlibrary_1 PROPERTIES 
         IMPORTED_LOCATION_RELEASE ${_IMPORT_PREFIX}/lib/mysharedlibrary_1.so)

add_library(mysharedlibrary_2 SHARED IMPORTED)
set_target_properties(mysharedlibrary_2 PROPERTIES
          IMPORTED_LOCATION_RELEASE ${_IMPORT_PREFIX}/lib/mysharedlibrary_2.so)

add_library(MyTarget INTERFACE)
target_link_libraries(MyTarget INTERFACE mysharedlibrary_1 mysharedlibrary_2)
2
KamilCuk 13 नवम्बर 2019, 17:51

क्योंकि set_target_properties() एक कॉल में कई प्रॉपर्टी सेट कर सकता है , आपको निम्नलिखित तर्क को IMPORTED_LOCATION_RELEASE को एक तर्क के रूप में प्रकट करना होगा। इसे प्राप्त करने के लिए, आप पुस्तकालयों को अर्धविराम से अलग सूची में जोड़ सकते हैं:

set_target_properties(MyTarget PROPERTIES IMPORTED_LOCATION_RELEASE
    "${_IMPORT_PREFIX}/lib/mysharedlibrary_1.so;${_IMPORT_PREFIX}/lib/mysharedlibrary_2.so"
)

या, आप अपने लिए सूची बनाने के लिए set() कमांड का उपयोग कर सकते हैं। आप इन पुस्तकालयों को एक चर में सेट कर सकते हैं, फिर सूची चर को set_target_properties() कॉल में विस्तारित करने दें:

set(MY_SHARED_LIBS
    "${_IMPORT_PREFIX}/lib/mysharedlibrary_1.so" 
    "${_IMPORT_PREFIX}/lib/mysharedlibrary_2.so"
)

set_target_properties(MyTarget PROPERTIES 
    IMPORTED_LOCATION_RELEASE "${MY_SHARED_LIBS}"
)

तीसरा विकल्प set_property() का उपयोग करना है, जो अनुमति देता है आप प्रत्येक पुस्तकालय को एक अलग तर्क के रूप में सूचीबद्ध करने के लिए, जो अधिक सही स्वरूपण प्रदान करने में मदद कर सकता है:

set_property(TARGET MyTarget PROPERTY
    IMPORTED_LOCATION_RELEASE 
    ${_IMPORT_PREFIX}/lib/mysharedlibrary_1.so
    ${_IMPORT_PREFIX}/lib/mysharedlibrary_2.so
)
2
squareskittles 13 नवम्बर 2019, 16:47
मैं लिंक करने के लिए लाइब्रेरी फ़ाइलों को पास करने का प्रयास कर रहा हूं। अगर मैं वही करता हूं जो आपने यहां कहा है, तो मेरे संकलन चरण में cmake इसे "$PREFIX/lib/mysharedlib_1.so;$PREFIX/lib/mysharedlib_2.so" के रूप में व्याख्यायित करता है। लेकिन मैं वास्तव में जो चाहता हूं वह $PREFIX/lib/mysharedlib_1.so $PREFIX/lib/mysharedlib_2.so है। ध्यान दें कि मुझे "" भी नहीं चाहिए
 – 
Chani
13 नवम्बर 2019, 16:39
ठीक है, "लेकिन यह काम नहीं करता" बताते समय आपका प्रश्न अस्पष्ट था, लेकिन अब आपके लक्ष्य अधिक स्पष्ट हैं। मैंने अपने उत्तर में एक तीसरा विकल्प जोड़ा है जो आपके द्वारा देखे जा रहे स्वरूपण समस्या में मदद कर सकता है।
 – 
squareskittles
13 नवम्बर 2019, 16:49