tutorial build-process macros compilation cmake portability

build process - tutorial - Pregunta de sintaxis del comando cmake



cmake tutorial (3)

Necesito la sintaxis de una macro CMAKE que genera archivos .cc y .h desde una herramienta como lex / yacc.

¿Podría alguien por favor mostrarme la sintaxis para el siguiente ejemplo inventado:

Supongamos que tengo un archivo y.cc que depende de x.cc y xh, los dos archivos mencionados son generados por la herramienta z_tool del archivo xz. ¿Cuál sería la sintaxis para esto?

Para este ejemplo supongamos que y.cc se convertirá en una biblioteca estática, y como soy bastante nuevo en CMAKE, el CMakellist.txt completo para este ejemplo artificial sería muy útil. Estoy buscando una solución portátil como las herramientas que utilizo. Estoy usando están disponibles en Windows, así como las variantes de UNIX.


La siguiente línea tiene Typo

FLEX_TARGET(MyScanner lexer.l ${CMAKE_CURRENT_BIANRY_DIR}/lexer.cc)

BIANRY se debe escribir como BINARY .

Nota: CMake Documentation también tiene este error. (en 2.8.0, esto está arreglado en la documentación 2.8.10) ..


/ * Para que funcione en mi Mac con Lion. Cambié los nombres de los archivos a y.tab.c y lex.yy.c, que son los archivos de salida si ejecuta lex lex.l y yacc -D yacc.y desde la línea de comandos. Vea abajo. * /

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})


En lugar de darle la respuesta a un ejemplo artificial, esta es la forma en que generaría un ejecutable usando flex y bisonte

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})

Los paquetes de búsqueda de CMake para bison / flex se incluyen en la instalación predeterminada, por lo que se trata de una plataforma cruzada.

En general, para crear un resultado que luego se utilizará como entrada, puede usar la función add_custom_command . Si usa una salida del comando personalizado como una entrada a una biblioteca o ejecutable, entonces CMake sabe ejecutar su comando personalizado antes de compilar las fuentes para el objetivo de biblioteca / ejecutable.