Pourquoi ne CMake ignorer exporté CXX et CC des variables d'environnement?
Je suis en cours d'exécution d'un CMake (3.4.3), comme cela, comme expliqué dans le CMake FAQ:
export CC="cc_args.py $PWD/../bin/gcc"
export CXX="cc_args.py $PWD/../bin/g++"
cmake -DCMAKE_BUILD_TYPE=Debug ..
Cependant quand j'ai l'impression CMAKE_CXX_COMPILER
et CMAKE_C_COMPILER
il pointe toujours vers le système par défaut de compilateurs en /usr/bin
. Il ne fonctionne que lorsque j'ai choisi de lire-dans les variables d'environnement comme ceci:
IF (NOT $ENV{CC} STREQUAL "")
SET(CMAKE_C_COMPILER $ENV{CC})
ENDIF ()
IF (NOT $ENV{CXX} STREQUAL "")
SET(CMAKE_CXX_COMPILER $ENV{CXX})
ENDIF ()
Mais même alors, le bâtiment échoue avec ce message:
/bin/sh: 1: /home/peterg/bin/cc_args.py /home/peterg/Code/build/../bin/g++: not found
Cependant, je suis certain que tous les chemins sont corrects depuis l'exécution de juste le chemin entre les deux points de sorties de ce que devrait:
g++: fatal error: no input files
compilation terminated.
Mise à jour:
Il semble que le processus de compilation n'aime pas les espaces dans le compilateur chemins. J'ai maintenant créé deux scripts (un pour GCC et un pour les CC) de laquelle s'enroulent les commandes et de propager les arguments et qui semble fonctionner. Mais il me semble que je suis en train de faire quelque chose de fondamentalement mauvais parce que CMake aussi de ne pas accepter la exporté CC=proxy_script_cc.sh
et GCC=proxy_script_gcc.sh
variables sans les espaces par lui-même.
-DCMAKE_CXX_COMPILER
et ne pas perdre son temps avec des variables shell.Je pense que ce que vous recherchez est quelque chose comme
set_directory_properties(PROPERTIES RULE_LAUNCH_COMPILE "bash proxy_script_cc.sh")
ou des variables globales CMAKE_<LANG>_COMPILER_LAUNCHER
Le
cc_args.py
script enveloppe le compilateur pour extraire des informations pour l'auto-complétion.Pour moi, CMake ignore
ENV{CC}
sur Windows mais pas CentOS. Dans les deux cas, il n'y a pas d'espaces dans le chemin de la GCC.
OriginalL'auteur Lenar Hoyt | 2016-06-13
Vous devez vous connecter pour publier un commentaire.
En tournant mon commentaire en réponse
Problème
Que je vous ai donné le code de l'essayer et de reproduire votre problème
Si je regarde
CMakeDetermineCXXCompiler.cmake
code et àget_filename_component()
de la documentation, cela signifie simplement qu'il n'a pas trouvercc_args.py
dans "le chemin de recherche de système" ou par rapport à votre binaire répertoire de sortie.Solution
De sorte qu'il fonctionne lorsque vous donner un chemin d'accès complet ou un chemin d'accès relatif à votre sortie binaire dir avec quelque chose comme
Alternative
CMake permet de définir le "lanceur de scripts" par exemple, avec
CMAKE_<LANG>_COMPILER_LAUNCHER
Références
OriginalL'auteur Florian
Passer
-DCMAKE_CXX_COMPILER=<path/to/compiler>
à votre CMake appel. C'est moins sujette aux erreurs par rapport à jongler avec des variables shell.Par le biais de ce drapeau, vous pouvez indiquer le chemin vers le compilateur C++ de CMake est censé utiliser.
OriginalL'auteur usr1234567