代码之家  ›  专栏  ›  技术社区  ›  Hassan Syed

cmake命令语法问题

  •  8
  • Hassan Syed  · 技术社区  · 16 年前

    我需要 克马克 从lex/yacc等工具生成.cc和.h文件的宏。

    有人能给我看一下下面这个精心设计的例子的语法吗

    假设我有一个依赖于x.cc和x.h的y.cc文件,上面提到的两个文件是由tool zètool从x.z文件生成的。这个文件的语法是什么?

    对于这个示例,假设y.cc将变成一个静态库,并且由于我对CMakellist.txt还很陌生,因此这个精心设计的示例的完整CMakellist.txt将非常有用。

    3 回复  |  直到 16 年前
        1
  •  16
  •   rici    8 年前

    以下是使用 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})
    

    通常,要创建稍后用作输入的输出,可以使用 add_custom_command 功能。如果使用自定义命令的输出作为库或可执行文件的输入,那么CMake知道在编译库/可执行文件目标的源代码之前运行自定义命令。

        2
  •  1
  •   Mehul Mistri    13 年前

    下一行有错别字

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

    二元的 .

        3
  •  1
  •   Richard Catlin    13 年前

    /*让它在我的Mac和Lion上工作。我将文件名改为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})
    
    推荐文章