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
prog:iwyu [2024/02/23 16:28] – Ajout des options à l'exécution 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" > fix.log+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''.
  
-  * Option d'exécution+====Option d'exécution====
  
-Si vous préférez les entêtes aux ''forward declaration'', il faut ajouter l'option ''%%--no_fwd_decls%%''.+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. 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.
  
-  * Application des résultats+=====Patch=====
  
 <code bash> <code bash>
Ligne 34: Ligne 36:
  
 Par défaut, les headers ne sont pas modifiés. Il faut ajouter l'option ''%%--nosafe_headers%%''. Par défaut, les headers ne sont pas modifiés. Il faut ajouter l'option ''%%--nosafe_headers%%''.
-====Options==== 
  
-  * Filtrer les erreurs+=====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 42: 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 56: Ligne 60:
  
 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. 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.txt · Dernière modification : de root