2010-03-22 13 views
8

मुझे सीएमकेई मैक्रो का सिंटैक्स चाहिए जो लेक्स/yacc जैसे टूल से .cc और .h फ़ाइलों को उत्पन्न करता है।सेमीके कमांड सिंटैक्स प्रश्न

कोई मुझे निम्न काल्पनिक उदाहरण के लिए वाक्य रचना दिखाने कृपया सकते हैं:

कहते हैं कि मैं एक फ़ाइल y.cc कि x.cc और x.h पर निर्भर करता है है, का उल्लेख दो फ़ाइलों फ़ाइल x.z. से उपकरण z_tool द्वारा उत्पन्न कर रहे इसके लिए वाक्यविन्यास क्या होगा?

इस उदाहरण के लिए मान लीजिए कि y.cc एक स्थिर लाइब्रेरी में बदल जाएगा, और जैसा कि मैं सीएमकेई के लिए काफी नया हूं, इस उत्कीर्ण उदाहरण के लिए पूर्ण CMakellist.txt बहुत उपयोगी होगा। मैं एक पोर्टेबल समाधान की तलाश में हूं क्योंकि मेरे द्वारा उपयोग किए जा रहे टूल विंडोज़ के साथ-साथ यूनिक्स वेरिएंट पर उपलब्ध हैं।

उत्तर

15

के बजाय आप एक काल्पनिक उदाहरण का जवाब देने के लिए, यहाँ जिस तरह से आप एक निष्पादन flex और bison

find_package(BISON) 
find_package(FLEX) 

BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cc) 
FLEX_TARGET(MyScanner lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.cc) 
ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser) 

include_directories(${CMAKE_CURRENT_BINARY_DIR}) 
add_executable(Foo 
    Foo.cc 
    ${BISON_MyParser_OUTPUTS} 
    ${FLEX_MyScanner_OUTPUTS}) 
target_link_libraries(Foo ${FLEX_LIBRARIES} ${BISON_LIBRARIES}) 

का उपयोग कर CMake जंगली भैंसों के लिए पैकेज ढूंढें उत्पन्न होता है/फ्लेक्स डिफ़ॉल्ट स्थापना में शामिल किए गए हैं, तो यह पार मंच है।

सामान्य रूप से एक आउटपुट बनाने के लिए जिसे बाद में इनपुट के रूप में उपयोग किया जाएगा, आप add_custom_command फ़ंक्शन का उपयोग कर सकते हैं। यदि आप लाइब्रेरी या निष्पादन योग्य इनपुट के रूप में कस्टम कमांड से आउटपुट का उपयोग करते हैं, तो सीएमके लाइब्रेरी/निष्पादन योग्य लक्ष्य के स्रोतों को संकलित करने से पहले अपने कस्टम कमांड को चलाने के लिए जानता है।

+0

अच्छी तरह से समझाया गया। गीस्ट वास्तव में आउटपुट और इनपुट को कैसे तारित करना था: डी –

+0

वंशावली के लिए: cmake फ़ाइल में 'target_link_libraries (Foo $ {FLEX_LIBRARIES} $ {BISON_LIBRARIES}' जैसी कुछ भी शामिल करें। – cheshirekow

1

निम्न पंक्ति टाइपो

FLEX_TARGET(MyScanner lexer.l ${CMAKE_CURRENT_BIANRY_DIR}/lexer.cc) 

BIANRY रूप बायनरी वर्तनी सुधारा जाना चाहिए।

नोट: सीएमके दस्तावेज़ीकरण में इस टाइपो भी है। (2.8.0 में, यह 2.8.10 दस्तावेज में तय किया गया है) ..

1

/* इसे मेरे मैक पर शेर के साथ काम करने के लिए। मैंने फ़ाइलों के नाम y.tab.c और lex.yy.c में बदल दिए हैं, जो आउटपुट फाइलें हैं यदि आप कमांड लाइन से lex lex.l और yacc-d yacc.y चलाते हैं। निचे देखो। */

cmake_minimum_required(VERSION 2.8) 
project (LexYacc) 

find_package(BISON) 
find_package(FLEX) 

BISON_TARGET(MyParser yacc.y ${CMAKE_CURRENT_BINARY_DIR}/y.tab.c) 
FLEX_TARGET(MyScanner lex.l ${CMAKE_CURRENT_BINARY_DIR}/lex.yy.c) 
ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser) 

include_directories(${CMAKE_CURRENT_BINARY_DIR}) 
add_executable(LexYacc 
    ${BISON_MyParser_OUTPUTS} 
    ${FLEX_MyScanner_OUTPUTS}) 
target_link_libraries(LexYacc ${FLEX_LIBRARIES} ${BISON_LIBRARIES}) 
संबंधित मुद्दे