Comment la force d'une erreur dans un fichier gnumake
Je veux détecter une condition dans mon makefile lorsqu'un outil est la mauvaise version et la force de le faire échouer avec un message d'erreur indiquant que l'article n'est pas la bonne version.
Quelqu'un peut-il donner un exemple de cette?
J'ai essayé ce qui suit, mais il n'est pas la bonne syntaxe:
ifeq "$(shell svnversion --version | sed s/[^0-9\.]*://)" "1.4"
$error("Bad svnversion v1.4, please install v1.6")
endif
Grâce.
- Vous pourriez vouloir vérifier cette contre 1.4. J'ai 1.4.4 installé et le
--version
sortie contient beaucoup plus que le numéro de version. Essayez quelque chose commeifeq "$(shell svn --version | sed -nE -e '/version/s/^.*([0-9]+\.[0-9]\+)\..*$$/\1/p')" "1.4"
au lieu - Mon sed n'accepte pas l'-E: "sed: invalid option -- E"
- A-t-elle à faire? J'ai tendance à écrire ces tests à configurer.
- Ah.. alors modifier le match portion de l'expression de
^.*\([0-9][0-9]*\.[0-9][0-9]*\)\..*$$
. Le-E
permettrait expressions régulières étendues qui permettent la plus compacte des expressions parmi d'autres goodies. - Je le recommande citant l'expression régulière pour la coque de trop. Juste pour être sûr. I. e.,
ifeq ($(shell svnversion --version | sed '<regexp>'))
Vous permet d'économiser la peine de se soucier des caractères spéciaux du shell va engloutir les interpréter (sauf pour les simples guillemets eux-mêmes: remplacer les guillemets simples dans la cité de cordes avec'\''
(single-quote back-slash single-quote single-quote
) de leur échapper.
Vous devez vous connecter pour publier un commentaire.
De la manuel:
Cela se traduira
make
à une erreur fatale:define err_mesg = your multiline error mesage ... endef
, et puis,$(error $(err_mesg))
. Faire sera de garder et de sortieerr_mesg
comme il a été écrit.$
Alors $(erreur... de travaux, il est parfois plus facile d'utiliser une règle qui ne
Puis vous faire test_svn_version une condition préalable de votre haut niveau cible.
$(error)
(parse-temps de vérifier) etfalse
AKAexit 1
(au moment de l'exécution de la cible) est: utiliser$(error)
si votre build ne peut pas procéder à tous; si, au contraire, seulement des objectifs spécifiques ne peut pas être construite sans ce préalable, faire dépendretest_svn_version
.Le conditionnel a besoin d'attention aussi.