Quelle est la bonne manière pour permettre d'addresssanitizer dans CMake qui travaille dans Xcode

J'ai ajouté d'addresssanitizer drapeau comme suit:

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")

Tout construit et fonctionne très bien lors de l'utilisation de Unix Makefiles.

Le problème vient lors de la génération du projet Xcode, il ne veut tout simplement pas de lien car il ne peut pas trouver l'ASan bibliothèque.

J'ai déjà trouvé deux solutions, mais a décidé de ne pas les utiliser parce qu'ils ne peuvent pas être automatisées à l'aide seulement de CMake:

  1. Ajoutant -Wl,-undefined,dynamic_lookup les liens entre les drapeaux, il saute en les reliant à des bibliothèques dynamiques.
  2. Lien avec libclang_rt.asan_osx_dynamic.dylib directement.

Quel est donc le problème avec ces deux solutions?

  • Lors de l'utilisation de la solution #1, j'ai pour ouvrir manuellement la cible de système de Xcode et ajouter DYLD_INSERT_LIBRARIES variable d'environnement pointant vers libclang_rt.asan_osx_dynamic.dylib.
  • Lors de l'utilisation de la solution #2, le chemin de l'ASan bibliothèque varie entre ordinateurs.

En outre, comme autre solution, j'ai essayé activation de l'Adresse de Désinfectant drapeau de l'Xcode cible régime, mais il est intéressant de noter qu'il n'a pas détecter les problèmes, j'ai ajouté, donc je n'ai pas de liste cela comme une solution parce qu'il n'mon test.

Toute aide sera très appréciée.

  • peut-être vérifier cela: github.com/arsenm/sanitizers-cmake
  • Si vous connaissez une Xcode réglage de projet qui tourne sur ce que vous voulez, vous pouvez le définir à partir de CMake par le remplissage de CMAKE_XCODE_ATTRIBUTE_... variables ou à l'aide de la cible propriétés XCODE_ATTRIBUTE_....
InformationsquelleAutor ObjSal | 2017-06-02