Estoy trabajando en un proyecto de analizador fuente C++ y parece que clang es un buen candidato para el trabajo de análisis. El problema es que el clang depende en gran medida del proyecto de infraestructura "llvm", ¿Cómo lo configuro para obtener un front-end limpio sin ningún backend concreto orientado a la máquina? Al igual que LCC, proporcionan un back-end "nulo" para las personas que se centran en las partes del analizador. Cualquier sugerencia es apreciada.¿Cómo hacer un frente de clang limpio?
Respuesta
Hace poco hice esto en Windows.
Descargue la fuente de clang y llvm de here.
Instale cmake y Python (a diferencia de los documentos, necesita Python solo para generar clang; al menos, cmake se da por vencido si no puede encontrar un tiempo de ejecución de Python).
También necesita VS2008 o VS2010.
Una cosa que no es del todo evidente es la estructura de directorios necesaria:
projectRoot
build <- intermediate build files and DLLs, etc. will go here
llvm <- contents of llvm-3.0.src from llvm-3.0.tar go here
tools
clang <- contents of clang-3.0.src from clang-3.0.tar go here
y siga las windows build instructions desde el paso 4 en adelante. No intente usar la GUI de cmake, es un horror; solo usa los comandos dados en las instrucciones de compilación.
Una vez finalizada la generación (que tarda un tiempo) que tendrá:
projectRoot
build
bin
Release <- libclang.dll will be here
lib
Release <- libclang.lib will be here
llvm
tools
clang
include
clang-c <- Index.h is here
Index.h define la API para acceder a información sobre su código fuente; contiene bastante documentación sobre las API.
Para empezar usando sonido metálico que necesita algo como:
CXIndex index = clang_createIndex(1, 1);
// Support Microsoft extensions
char *args[] = {"-fms-extensions"};
CXTranslationUnit tu = clang_parseTranslationUnit(index, "mySource.c", args, ARRAY_SIZE(args), 0, 0, 0);
if (tu)
{
CXCursor cursor = clang_getTranslationUnitCursor(tu);
// Use the cursor functions to navigate through the AST
}
Gracias arx! Estoy intentando tu enfoque. –
sí, funciona perfectamente. –
Por desgracia, no se puede conseguir front-end "puro" sin detalles específicos de la máquina. C/C++ son idiomas intrínsecamente vinculados a la máquina. Piense en el preprocesador y las definiciones integradas, los tamaños de los tipos integrados, etc. Algunos de estos pueden abstraerse, pero no p. preprocesador.
- 1. ¿Cómo hacer un ciclo asincrónico limpio?
- 2. ¿Cómo incluir un objetivo limpio en Makefile?
- 3. ¿Cómo hacer frente a la URISyntaxException
- 4. Definición de 'código limpio'
- 5. ¿Cómo hacer el código más limpio al informar el progreso a un usuario?
- 6. ¿Cómo compilo C++ con Clang?
- 7. Haskell records, un enfoque más limpio?
- 8. ¿Cómo se verifica si un repositorio mercurial está limpio?
- 9. construyendo un analizador con clang
- 10. Estoy buscando un tutorial HTML limpio
- 11. diferencia entre clang y Apple clang?
- 12. Android View.onDraw() siempre tiene un lienzo limpio
- 13. ¿Por qué/cuándo necesito un objetivo "limpio"?
- 14. ¿Cómo usar bootstrap y LESS y mantener un proyecto limpio?
- 15. mvn limpio sin dependencias
- 16. Perforce sincronización rápida de un directorio a un estado limpio
- 17. ¿Cómo configuro un Clang Toolchain en Eclipse en Windows?
- 18. deshacer Git Limpio
- 19. ¿Cómo funcionan los 'bloques' de Clang?
- 20. cómo hacer frente a la posición en la aC# corriente
- 21. ¿Cómo hacer que una ventana PyQT4 salte al frente?
- 22. ¿Cómo puedo hacer que el "escaneo-compilación" de Clang funcione con SCons?
- 23. Cómo hacer que gcc/clang advierta sobre saltos faltantes en instrucciones de cambio
- 24. problema de vinculador de clang
- 25. clang completo no funciona
- 26. Ruby daemon con cierre limpio
- 27. ¿He encontrado un error en Clang?
- 28. GNU make: objetivo limpio depende de incluye
- 29. ¿Cómo puedo hacer que un NSView se mueva al frente de todos los NSViews?
- 30. Instrumentación dinámica con Clang
Aparte de algunas bibliotecas de soporte (que proporcionan algunas clases de utilidades y códigos independientes del sistema operativo), no debería necesitar el LLVM completo. ¿Qué bibliotecas de Clang estás usando? –
Voy a usar todo el ejecutable de clang pero con un back-end ficticio. –
¿Conoces 'libclang'? Es una biblioteca C (con una interfaz estable garantizada) que puede exponer el Clang AST. Es mucho más ligero. De lo contrario, simplemente puede usar las bibliotecas C++ (tenga en cuenta que la interfaz es * no * estable), el ejecutable incrusta cosas que no serán realmente útiles para usted, creo. –