# Simply use : # add_bison_files(foo.y) # and # add_flex_files(foo.l) # then add ${CMAKE_CURRENT_BINARY_DIR}/foo.tab.c # and ${CMAKE_CURRENT_BINARY_DIR}/foo.yy.c to the source list function(add_bison_files) foreach(_file ${ARGN}) get_filename_component(_name ${_file} NAME_WE) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_name}.tab.c ${CMAKE_CURRENT_BINARY_DIR}/${_name}.tab.h COMMAND bison -p ${_name}_ -o ${CMAKE_CURRENT_BINARY_DIR}/${_name}.tab.c --defines=${CMAKE_CURRENT_BINARY_DIR}/${_name}.tab.h ${CMAKE_CURRENT_SOURCE_DIR}/${_file} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_file}) endforeach() endfunction() function(add_flex_files) foreach(_file ${ARGN}) get_filename_component(_name ${_file} NAME_WE) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_name}.yy.c ${CMAKE_CURRENT_BINARY_DIR}/${_name}.yy.h COMMAND flex -o ${CMAKE_CURRENT_BINARY_DIR}/${_name}.yy.c --header-file=${CMAKE_CURRENT_BINARY_DIR}/${_name}.yy.h ${CMAKE_CURRENT_SOURCE_DIR}/${_file} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_file}) endforeach() endfunction()