2012-04-04 12 views
6

मेरे पास एक बड़ी क्रॉस-प्लेटफार्म परियोजना है जिसे विभिन्न स्थानों पर निर्माण करने की आवश्यकता है; कुछ स्थानों पर, विभिन्न यूआई टूलकिट्स, ध्वनि एपीआई इत्यादि उपलब्ध हो सकते हैं, और मैं स्वचालित रूप से कॉन्फ़िगर करने का सबसे अच्छा तरीका जानने का प्रयास कर रहा हूं कि किस लाइब्रेरी मौजूद हैं, इस आधार पर कौन से लक्ष्य कॉन्फ़िगर किए गए हैं।सीएमके बिल्डिंग लक्ष्य सशर्त रूप से पुस्तकालय अस्तित्व के आधार पर

कोड मुझे लगता है कि के लिए कोशिश कर रहा हूँ उदाहरण के लिए, है:

find_library(PC_EGL EGL) 
find_library(PC_GLESv2 GLESv2) 
find_library(PC_Xxf86vm Xxf86vm) 
if (DEFINED PC_EGL AND DEFINED PC_GLESv2 AND DEFINED PC_Xxf86vm) 
    add_executable(foo foo.cpp) 
    target_link_libraries(foo ${PC_EGL} ${PC_GLESv2} ${PC_Xxf86vm}) 
endif() 

हालांकि, ऐसा होता है कि मैं एक प्रणाली है जो libGLESv2 उपलब्ध नहीं है पर इस निर्माण में, मैं त्रुटि मिलती है:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND. 
Please set them or make sure they are set and tested correctly in the CMake files: 
PC_GLESv2 
    linked by target "foo" in directory /path/to/platform 

find_library प्रलेखन का तात्पर्य है कि परिवर्तनीय पीसी_ईजीएल_एनओटीएफओएनडीडी सेट होनी चाहिए, लेकिन यह नहीं है (सीएमके 2.8.5)। तो, यह निर्धारित करने के लिए find_library का उपयोग करने का उचित तरीका क्या है कि कोई लक्ष्य मौजूद होना चाहिए या नहीं? यह का उपयोग कर

if (NOT PC_EGL MATCH "-NOTFOUND") 

थोड़ा कमजोर और बारीकियों है की तरह लगता है, इसलिए वहाँ wheter एक पुस्तकालय सब पर मिला था पर आधारित एक CMake आदेश पथ का निर्धारण करने के लिए एक बेहतर व्यवस्था है?

उत्तर

9

यह बस

if(PC_EGL AND PC_GLESv2 AND PC_GLESv2) 

CMake 0, FALSE, OFF, ANYTHING-NOTFOUND के रूप में झूठी व्यवहार करता है।

+0

धन्यवाद! ऐसा लगता है कि दस्तावेज़ीकरण या उदाहरणों में यह खोजना आसान होना चाहिए था, जो कि मेरे पास सीएमके के साथ एक आम समस्या है - एक बार मुझे पता है कि कुछ कैसे करना आसान है, लेकिन यह कैसे करना है, इतना नहीं। – fluffy

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