我需要一个CMAKE宏的语法,该宏从像lex/yacc这样的工具中生成.cc和.h文件。
有谁能给我看看下面这个设计的例子的语法:
假设我有一个依赖于y.cc和x.h的文件x.cc,上面提到的两个文件是由x.z文件中的工具z_tool生成的。这样做的语法是什么?
对于这个示例,假设y.cc将被转换为一个静态库,并且由于我对CMAKE非常陌生,这个精心设计的示例的完整CMakellist.txt将非常有用,我正在寻找一个可移植的解决方案,因为我使用的工具可以在windows和UNIX变体上使用。
发布于 2010-03-22 12:55:18
与其给出一个人为的示例的答案,不如使用flex和野牛生成一个可执行文件
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})bison/flex的CMake查找包包含在默认安装中,因此这是跨平台的。
通常,要创建一个稍后将用作输入的输出,您可以使用命令函数。如果您使用自定义命令的输出作为库或可执行文件的输入,那么CMake知道在编译库/可执行目标的源之前运行自定义命令。
发布于 2012-11-20 05:20:34
下一行有台风
FLEX_TARGET(MyScanner lexer.l ${CMAKE_CURRENT_BIANRY_DIR}/lexer.cc)BIANRY应拼写为二进制。
注意: CMake文档中也有这个错误。(在2.8.0中,这一点在2.8.10文档中得到了修正)。
发布于 2013-01-23 18:21:39
/*让它在我的Mac上和狮子一起工作。我将文件名更改为y.tab.c和lax.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})https://stackoverflow.com/questions/2491421
复制相似问题