用cmake 编译 bison和flex
2015-01-18 20:17
274 查看
DBScale是用cmake来编译的,所以往里面添加bison和flex编写的解析器的时候需要修改对应的CMakeList.txt文件。
include_directories(. ${CMAKE_CURRENT_BINARY_DIR} )
#首先是在include_directories中添加${CMAKE_CURRENT_BINARY_DIR}。
因为执行flex和bison后生成的.c和.h
#文件是生成在${CMAKE_CURRENT_BINARY_DIR}中。
SET(PARSER_DIR ${CMAKE_SOURCE_DIR}/driver/mysql)
ADD_CUSTOM_TARGET(
GenServerSource
DEPENDS ${GEN_SOURCES}
)
#添加一个custom_target用于构建依赖。该target依赖${GEN_SOURCES}指向的文件
SET(GEN_SOURCES
${CMAKE_CURRENT_BINARY_DIR}/lex.yy.c
${CMAKE_CURRENT_BINARY_DIR}/parser.tab.c
${CMAKE_CURRENT_BINARY_DIR}/parser.tab.h
${CMAKE_CURRENT_BINARY_DIR}/parser.l.h
)
#定义${GEN_SOURCES}变量为flex和bison要生成的文件。
SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} GENERATED)
#告知cmake ${GEN_SOURCES}指向的文件是编译过程中生成的,以避免执行cmake命令的时候报文件找不到
ADD_CUSTOM_COMMAND(
SOURCE
${PARSER_DIR}/parser.y
COMMAND bison -d
${PARSER_DIR}/parser.y
TARGET GenServerSource
OUTPUTS
${CMAKE_CURRENT_BINARY_DIR}/parser.tab.c
${CMAKE_CURRENT_BINARY_DIR}/parser.tab.h
WORKING_DIRECTORY
${PARSER_DIR})
#上面是执行bison命令,需要注意的是OUTPUTS一定要和${GEN_SOURCES}中文件一致,并且target设置对
#否则无法确保执行顺序
ADD_CUSTOM_COMMAND(
SOURCE
${PARSER_DIR}/parser.l
COMMAND flex
${PARSER_DIR}/parser.l
TARGET GenServerSource
OUTPUTS
${CMAKE_CURRENT_BINARY_DIR}/lex.yy.c
${CMAKE_CURRENT_BINARY_DIR}/parser.l.h
WORKING_DIRECTORY
${PARSER_DIR})
#上面是执行flex命令,其他同bison
add_library(driver SHARED
sourcefile1.cc sourcefile2.cc
sourcefile3.cc
${CMAKE_CURRENT_BINARY_DIR}/lex.yy.c
${CMAKE_CURRENT_BINARY_DIR}/parser.tab.c)
#这里将flex和bison生成的.c文件编译到程序的动态库中,需要注意指定路径
#${CMAKE_CURRENT_BINARY_DIR}
ADD_DEPENDENCIES(driver GenServerSource)
#指明动态库driver所需要的依赖,所以可以保证cmake会先生成GenServerSource,
而GenServerSource又
#依赖${GEN_SOURCES}指明的文件, 而这些文件又是由两个ADD_CUSTOM_COMMAND命令来生成的
#(outputs中给出的),所以会先执行两个ADD_CUSTOM_COMMAND命令
转载请注明转自高孝鑫的博客
include_directories(. ${CMAKE_CURRENT_BINARY_DIR} )
#首先是在include_directories中添加${CMAKE_CURRENT_BINARY_DIR}。
因为执行flex和bison后生成的.c和.h
#文件是生成在${CMAKE_CURRENT_BINARY_DIR}中。
SET(PARSER_DIR ${CMAKE_SOURCE_DIR}/driver/mysql)
ADD_CUSTOM_TARGET(
GenServerSource
DEPENDS ${GEN_SOURCES}
)
#添加一个custom_target用于构建依赖。该target依赖${GEN_SOURCES}指向的文件
SET(GEN_SOURCES
${CMAKE_CURRENT_BINARY_DIR}/lex.yy.c
${CMAKE_CURRENT_BINARY_DIR}/parser.tab.c
${CMAKE_CURRENT_BINARY_DIR}/parser.tab.h
${CMAKE_CURRENT_BINARY_DIR}/parser.l.h
)
#定义${GEN_SOURCES}变量为flex和bison要生成的文件。
SET_SOURCE_FILES_PROPERTIES(${GEN_SOURCES} GENERATED)
#告知cmake ${GEN_SOURCES}指向的文件是编译过程中生成的,以避免执行cmake命令的时候报文件找不到
ADD_CUSTOM_COMMAND(
SOURCE
${PARSER_DIR}/parser.y
COMMAND bison -d
${PARSER_DIR}/parser.y
TARGET GenServerSource
OUTPUTS
${CMAKE_CURRENT_BINARY_DIR}/parser.tab.c
${CMAKE_CURRENT_BINARY_DIR}/parser.tab.h
WORKING_DIRECTORY
${PARSER_DIR})
#上面是执行bison命令,需要注意的是OUTPUTS一定要和${GEN_SOURCES}中文件一致,并且target设置对
#否则无法确保执行顺序
ADD_CUSTOM_COMMAND(
SOURCE
${PARSER_DIR}/parser.l
COMMAND flex
${PARSER_DIR}/parser.l
TARGET GenServerSource
OUTPUTS
${CMAKE_CURRENT_BINARY_DIR}/lex.yy.c
${CMAKE_CURRENT_BINARY_DIR}/parser.l.h
WORKING_DIRECTORY
${PARSER_DIR})
#上面是执行flex命令,其他同bison
add_library(driver SHARED
sourcefile1.cc sourcefile2.cc
sourcefile3.cc
${CMAKE_CURRENT_BINARY_DIR}/lex.yy.c
${CMAKE_CURRENT_BINARY_DIR}/parser.tab.c)
#这里将flex和bison生成的.c文件编译到程序的动态库中,需要注意指定路径
#${CMAKE_CURRENT_BINARY_DIR}
ADD_DEPENDENCIES(driver GenServerSource)
#指明动态库driver所需要的依赖,所以可以保证cmake会先生成GenServerSource,
而GenServerSource又
#依赖${GEN_SOURCES}指明的文件, 而这些文件又是由两个ADD_CUSTOM_COMMAND命令来生成的
#(outputs中给出的),所以会先执行两个ADD_CUSTOM_COMMAND命令
转载请注明转自高孝鑫的博客
相关文章推荐
- 创建一门新的编程语言-Flex&Bison&LLVM-(6)-LLVM在Android和PC上的编译
- windows下编译bison + f…
- flex、bison代码在visual studio 编译
- Flex&Bison Tips(2010-08-27) 如何在VC中更好的断点调试flex&bison词法和语法分析器
- FLEX 面试必备(2)
- 最简单的flex & bison例子
- Flex compc & ant 编译
- Flex & Bison 计算器性能
- [转]gnu mips 编译参数
- 关于Flex的MessageBroker End…
- [原]eclipse 编译c/c++环境搭建问…
- q2 编译出现 Can't place multiple…
- Flex&Bison Tips (2010-08-27) 应用auto_ptr避免内存泄露
- flex & bison学习(二)
- flex & bison学习(一)
- flex开发中用的调试版本的flash pl…
- Flex&Bison Tips(2010-08-26)如何改善 flex & bison 在VC下的编辑环境
- Flex compc & ant 编译
- Web页面上工作流设计器(silverlight/Flex/Javascript/java Workflow&
- linux 关于编译模块缺少config.h而…