[[https://include-what-you-use.org|Site web]] ====CMake==== * Configuration S'intègre parfaitement avec [[prog:cmake|CMake]]. 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''. * Exécution de l'analyse iwyu_tool -p . -- -Xiwyu --mapping_file="$(pwd)/../.iwyu-suppressions" > fix.log Il est possible de mettre autant de ''-Xiwyu %%--%%mapping_file='' que l'on veut. Le dossier spécifié par ''-p'' est celui qui contient le fichier ''compile_commands.json''. * Option d'exécution Si vous préférez les entêtes aux ''forward declaration'', il faut ajouter l'option ''%%--no_fwd_decls%%''. 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 fix_includes.py --nosafe_headers < fix.log Par défaut, les headers ne sont pas modifiés. Il faut ajouter l'option ''%%--nosafe_headers%%''. ====Options==== * 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. [ { include: ["@\"gtest/.*\"", "private", "", "public"] }, { include: ["@", "private", "", "public"] } ] 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 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 ''%%""%%'' et éventuellement d'ajuster en fonction des premiers résultats.