In case I can not google it again. Here is this informative post. Following is the verbatim copy of this email.
# Create target for the parser ADD_CUSTOM_TARGET(FooParser echo “Creating parser.c”)
ADD_CUSTOM_COMMAND( SOURCE ${Foo_SOURCE_DIR}/src/lexer.l COMMAND ${FLEX_EXECUTABLE} ARGS -o${Foo_BINARY_DIR}/src/lexer.c ${Foo_SOURCE_DIR}/src/lexer.l TARGET FooParser OUTPUTS ${Foo_BINARY_DIR}/src/lexer.c)
ADD_CUSTOM_COMMAND( SOURCE ${Foo_SOURCE_DIR}/src/parser.y COMMAND ${BISON_EXECUTABLE} ARGS -y ${Foo_SOURCE_DIR}/src/parser.y -o ${Foo_BINARY_DIR}/src/parser.c TARGET FooParser DEPENDS ${Foo_BINARY_DIR}/src/lexer.c OUTPUTS ${Foo_BINARY_DIR}/src/parser.c)
SET(Foo_SRCS ${Foo_SRCS} ${Foo_BINARY_DIR}/src/parser.c)
SET_SOURCE_FILES_PROPERTIES(${Foo_BINARY_DIR}/src/parser.c GENERATED)
INCLUDE_DIRECTORIES(${Foo_BINARY_DIR}/src) Andy Cedilnik Kitware Inc.