Comment faire pour modifier des variables d'environnement adopté la coutume de CMake cible?
Peut-être que je suis absent quelque chose d'évident, mais je n'arrive pas à comprendre comment la définir explicitement les variables d'environnement qui peuvent être vus par les processus lancés par add_custom_target()
.
J'ai essayé le suivant:
set(ENV{PATH} "C:/Some/Path;$ENV{PATH}")
add_custom_target(newtarget somecommand)
Malheureusement, la %PATH%
variable d'environnement apparaît inchangé à somecommand
. (J'ai mis en place un Gist qui reproduit le problème ici.)
Ce que je fais mal?
- Je suggère que, puisque vous êtes la création d'un nouveau processus (à partir de vos commentaires), puis le nouveau processus sera fourni ses propres environemt, de ne pas hériter de l'environnement du processus principal. Si vous créer un processus fils du processus principal, puis à l'environnement devraient être héréditaire, mais je ne sais rien de
cmake
alors, j'ai peut être moyen de sortir d'ici. Vous devez cependant utiliserbackslash
annuaire-séparateurs, pas/
comme/
est un commutateur de préfixe. Parfois/
fonctionne heureusement, mais ce n'est pas fiable.
Vous devez vous connecter pour publier un commentaire.
Un portable moyen de définir des variables d'environnement pour une cible personnalisée est d'utiliser CMake de commande de l'outil de ligne de commande en mode
env
:E. g.:
Voir aussi Outil De Ligne De Commande Mode.
Vous définissez la variable d'environnement à configuration étape, mais la commande spécifiée pour
add_custom_target
est exécuté au construire étape. Voir aussi CMake FAQ: Comment puis-je obtenir ou de définir des variables d'environnement?Actuellement
add_custom_target
(et d'autres commandes, qui définissent les actions pour l'étape de génération, par exempleadd_custom_command
) ne supporte pas la simple définition des variables d'environnement. En tant que conseillé dans ce rapport de bogue, pour mise en valeur de la variable sans espaces sur Linux, vous pouvez ajouter le préfixe de commande avec "VAR=VAL" clauses. Pour les cas généraux vous pouvez préparer wrapper de script, dont les configurations de l'environnement et de l'exécution réelle de la commande:Sur Windows:
wrapper.chauve-souris:
CMakeLists.txt:
Sur Linux:
wrapper.sh:
CMakeLists.txt:
Si la valeur de la variable dépend de la configuration, vous pouvez configurer le script avec
configure_file
.Mise à JOUR:
Comme le fait remarquer @sakra,
env
mode de l'outil decmake
exécutable peut être utilisé comme un script de lancement:De cette façon est disponible depuis CMake 3.2.
add_custom_target()
est le nom de la cible.<real_command>
est un remplacement pour l'originalCOMMAND
paramètre etargs...
est à l'origine de la commande arguments.add_custom_target
n', vous pouvez regarder dans documentation ou de poser une nouvelle question sur un Débordement de Pile. Question en cours de post contient invocationadd_custom_target(newtarget somecommand)
, de sorte que les deux réponses (sakra et ma) implique que le sens de cette invocation est connu des lecteurs.