gpt4 book ai didi

c++ - QMAKE_EXTRA_COMPILERS - 头文件之间的依赖性问题

转载 作者:太空狗 更新时间:2023-10-29 21:51:03 26 4
gpt4 key购买 nike

我正在使用 flex 和 bison 创建一个 Qt 项目。头文件_CMPL_Parser.hh(由bison生成)和头文件compile.hh(#include _CMPL_Parser.hh)之间存在依赖关系).

我使用 QMAKE_EXTRA_COMPILERS 在我的项目中包含 flex 和 bison(请参阅下面我的项目文件的一部分)。不幸的是,_CMPL_Parser.hh 是在编译器需要此文件将其包含在 compiler.hh -> compiler.cc 之后创建的。

...

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

bisonheader.commands=@true
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 在被其他文件使用之前创建?

谢谢。

最佳答案

  1. 据我所知,QMake 已经带有在所有平台上使用 flex 的 lex/yacc 集成。所以对于 flex,只需说:

    CONFIG += lex
    LEXSOURCES += src/cmpl/CMPL_Scanner.l
  2. QMake 确实不支持开箱即用的 bison。但是看到 yacc 和 bison 基本相同,我会尝试如下操作:

    QMAKE_YACC=bison
    # maybe adjust some other QMAKE_YACC* variables
    CONFIG += yacc
    YACCSOURCES += src/cmpl/CMPL_Parser.yy
  3. 此外,如果您遇到编译作业在 bison 作业完成之前运行的问题(似乎是 qmake 错误),您应该使用此解决方法:

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

    这将强制每个 QMAKE_EXTRA_COMPILERS 的输出成为(主要)目标的依赖项,有效地确保生成的文件在编译开始之前可用。

关于c++ - QMAKE_EXTRA_COMPILERS - 头文件之间的依赖性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4500720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com