Comment passer des variables au makefile gnu d’arguments de ligne de commande ? En d’autres termes, je veux passer quelques arguments qui finira par devenir variables dans le fichier makefile.
Réponses
Trop de publicités?Vous disposez de plusieurs options pour définir des variables à partir de l'extérieur de votre makefile:
-
De l'environnement - chaque variable d'environnement est transformé en un makefile variable avec le même nom et la valeur.
Vous pouvez également définir
-e
option (aka--environments-override
), et vos variables d'environnement remplacent les cessions effectuées dans le makefile (à moins que ces travaux utilisent eux-mêmes l'override
directive . Cependant, il n'est pas recommandé, et c'est beaucoup mieux et beaucoup plus souple à utiliser?=
d'attribution (la variable de condition opérateur d'affectation, il n'a d'effet que si la variable n'est pas encore défini):FOO?=default_value_if_not_set_in_environment
Notez que certaines variables ne sont pas héritées de l'environnement:
-
MAKE
est obtenu à partir du nom du script -
SHELL
est définie dans un fichier makefile, ou par défaut/bin/sh
(justification: les commandes sont spécifiées dans le fichier makefile, et ils sont à la coque).
-
-
En ligne de commande -
make
peut prendre des assignations de variables dans le cadre de sa ligne de commande, mêlé avec des cibles:make target FOO=bar
Mais ensuite, toutes les missions à
FOO
variable dans le fichier makefile sera ignorée sauf si vous utilisez l'override
directive sur l'attribution. (L'effet est le même qu'avec-e
option pour les variables d'environnement). -
L'exportation de la part du parent Faire - si vous appelez Faire à partir d'un Makefile, généralement, vous ne devriez pas écrire explicitement des affectations de variables comme ceci:
# Don't do this! target: $(MAKE) -C target CC=$(CC) CFLAGS=$(CFLAGS)
Au lieu de cela, la meilleure solution pourrait être à l'exportation de ces variables. L'exportation d'une variable dans l'environnement de chaque coquille d'invocation, et de Faire des appels à partir de ces commandes de sélection de ces variable d'environnement comme indiqué ci-dessus.
# Do like this CFLAGS=-g export CFLAGS target: $(MAKE) -C target
Vous pouvez également exporter toutes les variables en utilisant
export
sans arguments.
Le moyen le plus simple est :
Puis dans votre makefile, vous pouvez vous référer à `` . Notez que cela ne se propage au secondaire rend automatiquement.
Si vous utilisez fait secondaire, consultez cet article : Communiquer les Variables à une sous marque
À partir du manuel:
Les Variables en faire peut venir de l'environnement dans lequel faire est d'exécuter. Chaque variable d'environnement qui font le voit lorsqu'il démarre est transformée en une variable avec le même nom et la valeur. Cependant, une affectation explicite dans le fichier makefile, ou avec un argument de la commande, les remplacements de l'environnement.
De sorte que vous pouvez faire (à partir de bash):
FOOBAR=1 make
résultant en une variable FOOBAR
dans votre Makefile.
Si vous créez un fichier appelé Makefile et ajoutez une variable comme cette $(unittest) puis vous serez en mesure d’utiliser cette variable dans le fichier Makefile, même avec des caractères génériques
exemple :
J’utilise BOOST_TEST et en donnant un caractère générique au paramètre--run_test=$(unittest) alors je vais être capable d’utiliser des expressions régulières pour filtrer le test, je veux mon Makefile pour exécuter