manu-projects / manu-cproject

1 stars 0 forks source link

Doc: Clang en Spacemacs, reconocer include de headers #38

Open neverkas opened 2 years ago

neverkas commented 2 years ago

Problema En los archivos fuente .c al iniciar clang, este no reconoce los include de los headers .h

Solucion

  1. Agregar la carpeta del proyecto en el workspace del spacemacs
  2. Crear un archivo .dir-locals.el en el raiz del proyecto que contiene los modulos (cada uno tiene su propio src/, include/, ..) agregar la siguiente expresion y evaluarla como cualquier sexp de elisp
    (setq projectile-project-root-functions '(projectile-root-local
                                          projectile-root-top-down
                                          projectile-root-top-down-recurring
                                          projectile-root-bottom-up))
  3. Agregar el archivo compile_commands.json en la raiz de cada modulo
    • modificar la ruta del proyecto, modulo, sirve para indicar que lo reconozca como raiz del src/ include/ ...
    • modificar el nombre del archivo fuente .c,
    • agregar las rutas de los archivos de cabecera con -I prefijo, esto lo lee como si fuese el parametro de gcc
      [{
      "directory":"/home/jelou/Documents/git/proyecto/project/modulo-3",
      "command": "/bin/clang sample.c -I/home/jelou/Documents/git/proyecto/project/modulo-3/include -I/home/jelou/Documents/git/proyecto/project/static/include",
      "file":"sample.c"
      }]
  4. Entrar a un archivo fuente .c y cuando en el minibuffer aparezca opciones para agregar o no la ruta del modulo como root, elegir la opcion i (seleccionar la ruta como root) Nota: si no hacemos el paso (1) te va a elegir solo el proyecto raiz no el modulo

Realizado los pasos anteriores, este seria la estructura que se uso

proyecto/
├── Makefile
├── project
│   ├── Makefile
│   ├── .dir-locals.el
│   ├── modulo-1
│   │   ├── bin
│   │   │   └── modulo-1.out
│   │   ├── compile_commands.json
│   │   ├── include
│   │   │   └── sample.h
│   │   ├── logs
│   │   ├── Makefile
│   │   ├── modulo.cfg
│   │   ├── src
│   │   │   └── sample.c
│   │   └── tests
│   │       ├── bin
│   │       ├── include
│   │       │   └── sample.h
│   │       ├── Makefile
│   │       ├── src
│   │       │   └── sample.c
│   │       └── test.cfg
│   ├── modulo-2
│   │   ├── bin
│   │   ├── compile_commands.json
│   │   ├── include
│   │   │   └── sample.h
│   │   ├── logs
│   │   ├── Makefile
│   │   ├── modulo.cfg
│   │   ├── src
│   │   │   └── sample.c
│   │   └── tests
│   │       ├── bin
│   │       ├── include
│   │       │   └── sample.h
│   │       ├── Makefile
│   │       ├── src
│   │       │   └── sample.c
│   │       └── test.cfg
│   ├── modulos.cfg
│   └── tests.cfg
├── project.cfg
└── README.org

Referencias