2012-03-30 16 views
7

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

जिस समाधान के साथ मैं आया था वह शीर्ष CMakeLists.txt फ़ाइल में विकल्पों का एक सेट है जो निर्धारित करता है कि एक निर्भर पैकेज स्थित होना चाहिए या नहीं।

option(WITH_FOO "Compile the interface to Foo, if found" ON) 
option(REQUIRE_FOO "Require that the Foo interface to be compiled" OFF) 
option(WITH_BAR "Compile the interface to Bar, if found" ON) 
option(REQUIRE_BAR "Require that the Bar interface to be compiled" OFF) 
... 
if(WITH_FOO) 
    if(REQUIRE_FOO) 
    find_package(Foo REQUIRED) 
    else(REQUIRE_FOO) 
    find_package(Foo) 
    endif(REQUIRE_FOO) 
else(WITH_FOO) 
    set(FOO_FOUND FALSE) 
endif(WITH_FOO) 

if(WITH_BAR) 
    if(REQUIRE_BAR) 
    find_package(Bar REQUIRED) 
    else(REQUIRE_BAR) 
    find_package(Bar) 
    endif(REQUIRE_BAR) 
else(WITH_BAR) 
    set(BAR_FOUND FALSE) 
endif(WITH_BAR) 

फिर उप-निर्देशिकाओं के CMakeLists.txt फाइलों में, इस तरह के रूप में बयान हो जाएगा:

if(BAR_FOUND) 
    add_subdirectory(bar_interface) 
endif(BAR_FOUND) 

मैं नहीं विशेष रूप से इस समाधान की तरह करते हैं, आंशिक रूप से, क्योंकि यह बहुत वर्बोज़ है और आंशिक रूप से क्योंकि मुझे लगता है कि ऐसा करने का कुछ और मानकीकृत तरीका होना चाहिए। क्या किसी को बेहतर, अधिक रखरखाव समाधान के बारे में पता है?

उत्तर

7

निम्न मानक CMake मॉड्यूल पर एक नज़र डालें:

  • FeatureSummary - सक्षम/अक्षम सुविधाओं
  • CMakeDependentOption का एक सारांश पैदा करने के लिए मैक्रो - अन्य विकल्पों पर निर्भर है एक विकल्प प्रदान करने के लिए मैक्रो

फ़ीचरसमरी (मैन्युअल से) का उपयोग करने के उदाहरण:

option(WITH_FOO "Help for foo" ON) 
add_feature_info(Foo WITH_FOO "The Foo feature provides very cool stuff.") 

find_package(LibXml2) 
set_package_properties(LibXml2 PROPERTIES DESCRIPTION "A XML processing library." URL "http://xmlsoft.org/") 
set_package_properties(LibXml2 PROPERTIES TYPE RECOMMENDED PURPOSE "Enables HTML-import in MyWordProcessor") 
set_package_properties(LibXml2 PROPERTIES TYPE OPTIONAL PURPOSE "Enables odt-export in MyWordProcessor") 

feature_summary(WHAT ALL) 
+0

अच्छा है! मुझे लगता है कि मुझे जो चाहिए वह कम या ज्यादा है। – Joel

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