Estoy usando CMake para construir mi proyecto C++ y tiene varios ejecutables y una biblioteca (todos ellos parte del mismo proyecto). Todo funciona bien, sin embargo, uno de mis ejecutables es un generador de código que crea algunas de las clases de la biblioteca. Tengo toda la generación funcionando pero no puedo encontrar la manera de llamar a este ejecutable (codegen) justo antes de que se construya la biblioteca. Estoy en entorno Linux. Espero que alguien pueda responder esto.Obtener CMake para ejecutar un objetivo en el proyecto antes de construir una biblioteca
11
A
Respuesta
17
En CMakeLists.txt
:
En primer lugar, definir su ejecutable:
add_executable(marks-code-generator gen.cpp)
A continuación, defina un comando personalizado para generar la fuente:
add_custom_command(OUTPUT generated.cpp generated.hpp
COMMAND marks-code-generator ARGS args here maybe
MAIN_DEPENDENCY input-file.in
DEPENDS marks-code-generator
COMMENT here we go!
VERBATIM)
La opción VERBATIM
se asegura de plataforma específica escaparse se hace correctamente. El COMMENT
se imprimirá mientras make se ejecuta, dando algo como [ 66%] here we go!
.
Por último, el nombre de su fuente generado en la lista de fuentes para su programa real:
add_executable(some-program generated.cpp generated.hpp non-generated.cpp foo.cpp)
Cuestiones relacionadas
- 1. Cómo configurar CMake para construir una biblioteca para el iPhone
- 2. Forzar Makefile para ejecutar script antes de construir objetivos
- 3. Creando una biblioteca usando autotools de cmake
- 4. Hacer comandos de impresión de cmake antes de ejecutar
- 5. Uso DLL externa en cmake construir
- 6. Incluyendo glib.h en un proyecto de CMake
- 7. CMake agrega dependencia al objetivo de instalación
- 8. En scons, ¿cómo puedo inyectar un objetivo para construir?
- 9. Cómo ejecutar el proyecto después de construir con maven
- 10. Construir y ejecutar un proyecto xcode a través de AppleScript
- 11. Construir/ejecutar el proyecto iOS Xcode desde la Terminal
- 12. ¿Cómo se puede ejecutar el objetivo CMake si se modificó el archivo especificado?
- 13. ¿Cómo ejecutar un objetivo diferente para un módulo de un proyecto de varios módulos?
- 14. CMAKE: compilar biblioteca y vincularla
- 15. MonoTouch con el Proyecto Biblioteca portátil no puede construir
- 16. ¿Cómo construir archivos de objetos solo una vez con cmake?
- 17. makefile ejecutar otro objetivo
- 18. Xcode 4: Cómo agregar biblioteca estática Objetivo Dependencia al Proyecto
- 19. makefile: ejecutar un objetivo de otro objetivo, más comandos adicionales
- 20. ¿Cómo obtener backbone.js para ejecutar una función después de construir una colección?
- 21. ¿Cómo elegir qué objetivo ejecutable de CMake será el predeterminado?
- 22. Archivos sobrescritos en el proyecto maven al construir una guerra
- 23. cmake - find_library - ubicación personalizada de la biblioteca
- 24. ¿Cómo construir el proyecto PyQT?
- 25. ¿Construir una biblioteca con Visual Studio que se pueda vincular a un proyecto de Qt?
- 26. ¿Cómo encontrar una biblioteca con cmake?
- 27. Deshabilitar un proyecto de Visual Studio para crear usando cmake
- 28. Proyecto de biblioteca Android: ¿cómo obtener contexto?
- 29. Cómo construir un objetivo de hormiga condicionalmente en Snow Leopard
- 30. ¿Cómo señalar cmake en el directorio específico de la biblioteca?
Gracias Jack, En caso de marcas de código generador de escribir los archivos generated.cpp/h para directorio actual o las de salida sencilla para stdout y dejar que la parte de SALIDA los escriba? Si es así, ¿acabo de separarlos con un EOF al escribir? – Mark
Cada vez tengo más la opinión de que los sistemas recursivos de compilación no funcionan. No funcionan con 'make', no funcionan con' automake' y no creo que funcionen con 'CMake'. ¿Hay alguna razón por la que no puedas hacer todo esto en un nivel superior 'CMakeLists.txt'? Use 'include' si se vuelve demasiado grande. Aún necesita hacer una salida a un archivo. La línea 'OUTPUT' en' add_custom_command' solo le dice a CMake qué archivos está generando (ya que no hay manera de que eso funcione por sí mismo), así que siga usando un 'ofstream' o lo que sea para generar su encabezado y fuente. –
Gracias Jack, me fijaré en moverme a un CMakeLists, parece que sería más fácil de mantener, etc. – Mark