2009-11-05 9 views
3

Bonjour Je veux construire un projet avec le compilateur Intel.CMake: comment ajouter des drapeaux de compilateur au compilateur non-par défaut

Avec gcc par défaut je lance habituellement:

cmake -DCMAKE_CXX_FLAGS=-I/some/path /path/to/project 

Et cela fonctionne très bien.

cmake -DCMAKE_CXX_COMPILER=icpc -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_FLAGS=-I/some/path /path/to/project 

Lorsque je tente d'utiliser le compilateur non-défaut, il n'a pas de chemin CMAKE_CXX_FLAGS contenu variable compilateur du tout.

Comment résoudre ce problème?

réponse correcte est:

  1. Vous devez spécifier le type de la variable CMAKE_CXX_FLAGS:

    -DCMAKE_CXX_FLAGS:STRING=-I/some/path 
    
  2. Vous devez fournir chemin complet à C et C++ compilateurs:

    cmake -DCMAKE_C_COMPILER=/opt/intel/bin/icc -DCMAKE_CXX_COMPILER=/opt/intel/bin/icpc -DCMAKE_CXX_FLAGS:STRING=-some-flag 
    
+1

donc choisissez une réponse ;-) –

Répondre

3

Y at-il une raison pour laquelle vous ne pouvez pas ajouter le chemin d'inclusion (de votre CMAKE_CXX_FLAGS) à votre fichier CMakeLists.txt?

add_includes(/some/path) 
+0

Oui. Je ne veux pas éditer CMakeLists.txt parce que c'est un fichier générique, je veux juste ajouter quelques spécifications pour la construction spécifique. Le fichier CMake ne doit pas connaître les chemins locaux de l'utilisateur. – Artyom

+1

Votre raisonnement n'a aucun sens pour moi. Pour que le build fonctionne pour d'autres personnes, ils ont également besoin des fichiers trouvés dans ce chemin include. Si c'est le cas, et que c'est une bibliothèque tierce que vous ne pouvez pas ajouter au projet, alors vous devriez avoir un module de recherche pour cela. Mettre des chemins d'inclusion supplémentaires dans la variable CXX_FLAGS est la mauvaise façon de le faire. – greyfade

+0

"ils auraient aussi besoin des fichiers trouvés dans ** que ** include path." Pourquoi pensez-vous, je pointe avec ces drapeaux à un emplacement personnalisé non-standard de ma bibliothèque foo-bar. Vos hypothèses sont fausses. Aussi ... CMakeLists.txt est sous le contrôle de la source, donc je ne veux pas accidentiellement mettre des changements non pertinents qui pointent vers mes fichiers locaux à l'arbre à venir. – Artyom

6

La bonne façon de faire ce que vous attendez est d'utiliser:

export CC=icc CXX=icpc cmake -DCMAKE_CXX_FLAGS=-I/some/path /path/to/project 
+0

Merci qui avait travaillé;) – Artyom

2

Je sais que vous ne voulez pas modifier le fichier CMakeLists.txt, mais qu'en est-éditer permettant à l'utilisateur de sélectionnez le compilateur - quelque chose comme

SET(MYVAR TRUE CACHE BOOL "Use intel compiler?") 

Et plus tard, si la variable MYVAR est définie, procédez add_includes() ..? Vous pouvez également utiliser certains utilitaires de recherche de paquets (CMAKE en fournit) pour trouver les fichiers d'inclusion spécifiques du compilateur, etc.

Questions connexes