57 votes

Utilisez -isystem au lieu de -I avec CMake

Existe-t-il un moyen dans CMake de forcer un chemin spécifié par include_directories (ou peut-être par une autre fonction) à utiliser l'indicateur -isystem au lieu de l'indicateur -I lors de la construction avec gcc?

Voir http://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options pour plus de détails sur -I et -isystem.

70voto

RobertJMaynard Points 1158

Oui vous force un chemin d'accès à un système en utilisant le SYSTÈME optionnel drapeau

include_directories(SYSTEM path)

http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:include_directories

Départ avec CMake 2.8.12 vous pouvez utiliser la nouvelle target_include_directories pour inclure le répertoire système comprend au niveau de la cible, tout en tirant parti des nouveaux besoins d'utilisation des fonctionnalités de cmake:

target_include_directories(foo SYSTEM PUBLIC path)

Maintenant la cible foo voie de l'utilisation en tant que système, et rien que des liens vers toto va également utiliser le chemin qu'automatiquement, comme un système. Vous pouvez contrôler la propagation de ces exigences d'utilisation en changeant le mot-clé PUBLIC PRIVÉ ou de l'INTERFACE.

http://cmake.org/cmake/help/v2.8.12/cmake.html#command:target_include_directories

11voto

ideasman42 Points 1682

Comme déjà dit, la bonne façon d'inclure les chemins d'accès est:

include_directories(SYSTÈME path1 chemin2)

Cependant, comme de CMake 2.8.4 et les Makefiles, Ce n'est utilisé que pour le C++ et pas en C, j'ai regardé dedans et GNU.cmake n'est pas initialisé: CMAKE_INCLUDE_SYSTEM_FLAG_C

De sorte que vous pouvez définir vous-même juste après l'appel de projet().

si(CMAKE_COMPILER_IS_GNUCC)
 set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
endif()

Mise à jour:

Le CMake, les développeurs ont corrigé cela dans 2.8.5

-8voto

the_void Points 3523

Vous pouvez utiliser CMAKE_C_FLAGS et CMAKE_CXX_FLAGS pour ajouter des indicateurs supplémentaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X