Outils pour utilisateurs

Outils du site


prog:iwyu

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
prog:iwyu [2023/01/18 11:37] – Réorganisation rootprog:iwyu [2025/10/27 15:35] (Version actuelle) – Réécriture root
Ligne 1: Ligne 1:
 [[https://include-what-you-use.org|Site web]] [[https://include-what-you-use.org|Site web]]
  
-====CMake==== +=====CMake=====
- +
-  * Configuration+
  
 S'intègre parfaitement avec [[prog:cmake|CMake]]. S'intègre parfaitement avec [[prog:cmake|CMake]].
Ligne 9: Ligne 7:
 Il faut commencer par activer l'option ''set(CMAKE_EXPORT_COMPILE_COMMANDS ON)''. Il faut commencer par activer l'option ''set(CMAKE_EXPORT_COMPILE_COMMANDS ON)''.
  
-Puis lancer la génération des fichiers ''Makefile'' avec ''%%CC="clang" CXX="clang++" cmake -S . -B build%%'' pour générer également le fichier ''compile_commands.json''.+Puis lancer la génération du fichier ''compile_commands.json'' avec ''%%CC="clang" CXX="clang++" cmake -S . -B build%%''.
  
-  * Exécution de l'analyse+Il est important d'utiliser le compilateur ''clang'' / ''clang++'' car ''iwyu'' est basé en interne sur ''llvm''. Il est préférable d'utiliser des header compatibles. 
 + 
 +=====Execution=====
  
 <code bash> <code bash>
-iwyu_tool -p . -- -Xiwyu --mapping_file="$(pwd)/../.iwyu-suppressions"+iwyu_tool -p . -- -Xiwyu --mapping_file="$(pwd)/../.iwyu-suppressions" -Xiwyu --no_default_mappings > fix.log
 </code> </code>
  
Ligne 21: Ligne 21:
 Le dossier spécifié par ''-p'' est celui qui contient le fichier ''compile_commands.json''. Le dossier spécifié par ''-p'' est celui qui contient le fichier ''compile_commands.json''.
  
-====Options====+====Option d'exécution====
  
-  * Filtrer les erreurs+Ajouter ''%%-Xiwyu --no_fwd_decls%%'' si vous préférez les entêtes aux ''forward declaration''
 + 
 +Ajouter ''%%-Xiwyu --no_default_mappings%%'' si le mapping par défaut est mauvais. 
 + 
 +Par défaut, iwyu va analyser tous les fichiers sources (''.cpp'', ''.cc'', ...) depuis le fichier ''compile_commands.json''. Les fichiers entête analysés doivent avoir le même nom (hors extension) que celui du fichier contenant le code source. Si on veut analyser d'autres fichiers, il faut utiliser l'option ''%%-Xiwyu --check_also="*path/*.h"%%'' (format wildcard). Les ''%%--check_also%%'' sont cumulables. 
 + 
 +=====Patch===== 
 + 
 +<code bash> 
 +fix_includes.py --nosafe_headers < fix.log 
 +</code> 
 + 
 +Par défaut, les headers ne sont pas modifiés. Il faut ajouter l'option ''%%--nosafe_headers%%''
 + 
 +=====Filtrer les erreurs=====
  
 Il est possible de supprimer certains avertissements en utilisant un fichier (ici ''.iwyu-suppressions''). Il est important que le chemin de ce fichier soit absolu. Il est possible de supprimer certains avertissements en utilisant un fichier (ici ''.iwyu-suppressions''). Il est important que le chemin de ce fichier soit absolu.
Ligne 29: Ligne 43:
 <file txt .iwyu-suppressions> <file txt .iwyu-suppressions>
 [ [
-    { include: ["@\"gtest/.*\"", "private", "<jessica/test/test.h>", "public"] }, +    {include : [ "@<Eigen\/src\/Core\/.*>", private, "<Eigen/Core>", public ]}, 
-    { include: ["@<gtest/.*>", "private", "<jessica/test/test.h>", "public"] } +    {include : [ "\"src/Core/ArrayBase.h\"", private, "<Eigen/Dense>", public ]}, 
-+    {include : [ "@<nlohmann\/.*>", private, "<nlohmann/json.hpp>", public ]} 
-</file>+    {include : [ "<bits/time.h>", private, "<ctime>", public ]}, 
 +    {symbol : [ "uint32_t", private, "<cstdint>", public ]}, 
 +    {symbol : [ "QDir", private, "<QDir>", public ]}, 
 +]</file>
  
 Dans la première partie ''private'', on met le nom de l'entête erroné. Si le texte commence par ''@'', la recherche est une expression régulière. Dans la première partie ''private'', on met le nom de l'entête erroné. Si le texte commence par ''@'', la recherche est une expression régulière.
Ligne 38: Ligne 55:
 Dans la seconde partie ''public'', on met le nom du juste entête. Dans la seconde partie ''public'', on met le nom du juste entête.
  
 +  * Qt
 +
 +Dans le code source, il y a un script ''mapgen/iwyu-mapgen-qt.py'' qui permet de générer du fichier de correspondance. Il est impératif de l'utiliser avec la version exacte de Qt.
 +
 +Attention, tout est codé en expression régulière et ''iwyu'' n'est pas du tout optimisé pour ça. Il est conseillé de remplacer tous les ''%%"@[\"<](Qt3DCore/)?qcomponent\\.h[\">]"%%'' par ''%%"<qcomponent.h>"%%'' et éventuellement d'ajuster en fonction des premiers résultats.
 +
 +Il est conseillé de ne pas utiliser ce script et d'ajouter manuellement la correspondance symbole / header.
prog/iwyu.1674038263.txt.gz · Dernière modification : de root