2010-12-21 3 views
3

flex와 bison을 사용하여 Qt 프로젝트를 만들고 있습니다. 헤더 파일 _CMPL_Parser.hh (bison에서 생성)과 헤더 파일 compile.hh (#include _CMPL_Parser.hh) 사이에는 종속성이 있습니다.QMAKE_EXTRA_COMPILERS - 헤더 파일 간의 종속성 문제

내 프로젝트에 flex 및 bison을 포함 시키려면 QMAKE_EXTRA_COMPILERS을 사용합니다 (아래 프로젝트 파일 부분 참조). 컴파일러에서 compiler.hh -> compiler.cc에이 파일을 포함해야한다면 불행히도 _CMPL_Parser.hh이 생성됩니다.

... 

FLEX_SOURCES = src/cmpl/CMPL_Scanner.l 
BISON_SOURCES = src/cmpl/CMPL_Parser.yy 

flex.commands=flex -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN} 
flex.output= $$OUT_PWD/_CMPL_Scanner.cc 
flex.input=FLEX_SOURCES 
flex.variable_out=SOURCES 
flex.name=flex ${QMAKE_FILE_IN} 
QMAKE_EXTRA_COMPILERS+=flex 

bisonsource.commands=bison -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN} 
bisonsource.output= $$OUT_PWD/_CMPL_Parser.cc 
bisonsource.input=BISON_SOURCES 
bisonsource.variable_out=SOURCES 
bisonsource.name=bisonsource ${QMAKE_FILE_IN} 
QMAKE_EXTRA_COMPILERS+=bisonsource 

[email protected] 
bisonheader.output= $$OUT_PWD/_CMPL_Parser.hh 
bisonheader.input=BISON_SOURCES 
bisonheader.variable_out=HEADERS 
bisonheader.name=bisonheader ${QMAKE_FILE_IN} 
#bisonheader.depends= bin/_CMPL_Parser.cc 
QMAKE_EXTRA_COMPILERS+=bisonheader 

... 

HEADERS += src/cmpl/Compiler.hh \ 
      src/cmpl/FileIO.hh \ 
    ... 

SOURCES += src/cmpl/Compiler.cc \ 
      src/cmpl/FileIO.cc \ 
     ... 

또한 프로젝트 파일에 다음 종속성을 정의하려고했습니다. 그러나 실패했다.

chh.input = src/cmpl/Compiler.hh 
chh.depends = $$OUT_PWD/_CMPL_Parser.hh 
chh.name = chh 
chh.dependency_type = TYPE_C 
chh.variable_out = HEADERS 
QMAKE_EXTRA_COMPILERS += chh 

어떻게 _CMPL_Parser.hh이 다른 파일에 의해 사용되기 전에 생성하는 것입니다 표현할 수 있습니까?

감사합니다.

답변

2
  1. QMake에는 필자가 볼 수있는 한 모든 플랫폼에서 flex를 사용하는 lex/yacc 통합이 이미 제공됩니다. 그래서 플렉스를 들어, 단지 말 :

    CONFIG += lex 
    LEXSOURCES += src/cmpl/CMPL_Scanner.l 
    
  2. qmake를 실제로 상자 밖으로 들소를 지원하지 않습니다. 또한

    QMAKE_YACC=bison 
    # maybe adjust some other QMAKE_YACC* variables 
    CONFIG += yacc  
    YACCSOURCES += src/cmpl/CMPL_Parser.yy 
    
  3. , 당신은 들소 작업이 완료되기 전에 컴파일 작업이 실행되는 문제로 실행하면 (A :하지만 Yacc에와 들소로보고 내가 다음과 같은 뭔가를 시도 할 것입니다, 기본적으로 동일

    lex.CONFIG += target_predeps 
    yacc_impl.CONFIG += target_predeps 
    yacc_decl.CONFIG += target_predeps 
    

    이 효과적으로 생성 된 파일은 이전에 사용할 수 있는지 보장 (주) 대상의 종속성으로 이러한 QMAKE_EXTRA_COMPILERS 각각의 출력을 강제로 : qmake를 버그, 당신이 해결 방법을 사용한다) 것 컴파일이 시작됩니다.