Forum Programmation.c [résolu] Génération d'entêtes précompilées avec GCC

Posté par  . Licence CC By‑SA.
0
11
oct.
2026

Bonjour,

J'essaie de générer des entêtes avec GCC , pour éviter de compiler à chaque fois d'imposants headers.
L'entête se génére bien (j'obtiens un fichier .h.gch). Le fichier est placé au même endroit que le .h, mais n'est jamais utilisé par défaut.
J'ai vérifié avec l'option -H qui donne le nom et la hiérarchie des entêtes utilisées (mon entête est un premier niveau, pas inclue par d'autres). Ce sont bien des .h à chaque fois.

$ ls
total 16M
1.2M nuklear.h 136K raylib.h 12K raylib-nuklear-test.c
3.9M nuklear.h.gch 3.6M raylib.h.gch 4.0K test_simple_nuk.c
56K raylib-nuklear.h 532K raylib-nuklear-test.o 504K test_simple_nuk.o
5.4M raylib-nuklear.h.gch 164K raylib-nuklear-test.png

$ gcc -c -H test_simple_nuk.c -I.
x raylib-nuklear.h.gch
. raylib-nuklear.h
.. raylib.h
… /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/stdarg.h
… /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/stdbool.h
.. nuklear.h # ça coince ici pendant 1 seconde
… /usr/lib/gcc/x86_64-pc-linux-gnu/16/include/stdint.h
(etc)
.. nuklear.h # oui il repasse (mais sans conséquences il y a évidemment un include guard)

Le seul .gch qui soit utilisé est raylib-nuklear.h qui lui même inclue raylib.h puis nuklear.h

L'include raylib.h passe en premier, sans aucune bizarrerie du préproc. J'ai déjà plus de doutes pour celui de nuklear.h . Mais aucun des deux n'est ignoré au profit du .gch , pourtant présent.

Merci d'avoir lu.

  • # ok compris

    Posté par  . Évalué à 2 (+0/-0). Dernière modification le 11 octobre 2026 à 19:43.

    $ gcc -c -Winvalid-pch -H test_simple_nuk.c -I.
    test_simple_nuk.c:2:28: warning: raylib-nuklear.h.gch: not used because ‘RAYLIB_NUKLEAR_IMPLEMENTATION’ is defined [-Winvalid-pch]
    2 | #include "raylib-nuklear.h"
    | ^
    x raylib-nuklear.h.gch

    Bon, c'est le premier .pch qui est ignoré. Je pensais bêtement que le 'x' au début de la ligne indiquait que c'était pris en compte, puis j'ai réfléchi cinq minutes.

    Plus qu'à trouver comment corriger. Je mettrais à jour ce post quand j'aurai trouvé, ne vous embêtez pas à répondre à cette question.

    Discussions en français sur la création de jeux videos : IRC libera / #gamedev-fr

  • # solution

    Posté par  . Évalué à 2 (+0/-0).

    J'aurais volontiers édité le message précédent, mais j'ai dépassé la durée limite d'edit.

    Ça fonctionne en compilant l'entête avec -DRAYLIB_NUKLEAR_IMPLEMENTATION .
    Je suis étonné qu'il faille forcer ce flag, puisque c'est justement l'objet de la lib (utiliser raylib avec nuklear).

    J'espère que ce post servira à quelqu'un, pas forcément pour raylib et nuklear d'ailleurs.

    Discussions en français sur la création de jeux videos : IRC libera / #gamedev-fr

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.