[CMake] cmake, lex & yacc
Maik Beckmann
maikbeckmann at gmx.de
Mon Jul 30 12:46:07 EDT 2007
Am Montag, 30. Juli 2007 16:46:44 schrieb Timur Ivanov:
> YACC=bison
> LEX=flex
>
> config_yacc.c: config_yacc.y config.h
> $(YACC) -d -o config_yacc.c config_yacc.y
>
> config_lex.c: config_lex.l config_yacc.c
> $(LEX) -oconfig_lex.c config_lex.l
>
<CMakeLists.txt>
project(parsing_foo)
find_program(LEX_EXE
flex
)
if(LEX_EXE STREQUAL "LEX_EXE-NOTFOUND")
message(FATAL_ERROR "dear user, plase install flex!")
endif(LEX_EXE STREQUAL "LEX_EXE-NOTFOUND")
find_program(YACC_EXE
bison
)
if(YACC_EXE STREQUAL "YACC_EXE-NOTFOUND")
message(FATAL_ERROR "dear user, plase install bison!")
endif(YACC_EXE STREQUAL "YACC_EXE-NOTFOUND")
# reuseable cmake macro for yacc
MACRO(YACC_FILE _filename)
GET_FILENAME_COMPONENT(_basename ${_filename} NAME_WE)
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.c
${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h
COMMAND ${YACC_EXE} -d
--output=${_basename}.c
${CMAKE_CURRENT_SOURCE_DIR}/${_filename}
DEPENDS ${_filename}
)
ENDMACRO(YACC_FILE)
# reuseable cmake macro for lex
MACRO(LEX_FILE _filename)
GET_FILENAME_COMPONENT(_basename ${_filename} NAME_WE)
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.c
COMMAND ${LEX_EXE}
-o${_basename}.c
${CMAKE_CURRENT_SOURCE_DIR}/${_filename}
DEPENDS ${_filename} )
ENDMACRO(LEX_FILE)
YACC_FILE(config_yacc.y)
LEX_FILE(config_lex.l)
add_executable(my_parsing_exe
... # whatever
config_yacc.c
config_lex.c
)
# just one more parsing executable
YACC_FILE(xyz_yacc.y)
LEX_FILE(xyz_lex.l)
add_executable(xyz_parsing_exe
... # whatever
xyz_yacc.c
xyz_lex.c
)
</CMakeLists.txt>
HTH, Maik Beckmann
More information about the CMake
mailing list