Ich versuche, eine make-Funktion zu schreiben, um eine leere Datei zu berühren / zu erstellen und / oder die Berechtigungen, den Benutzer und die Gruppe, wenn möglich, zu setzen oder zu warnen, falls nicht. Jedoch scheint jede bedingte Überprüfung innerhalb meiner Funktion wahr zu sein.
Das Wesentliche an meinem Makefile ist
%Vor% Ausführen von make test
outputs
Ich habe folgendes versucht / versucht:
ifeq "foo" "bar"
gibt auch ein ungültiges Ergebnis. Darüber hinaus bewertet $(info ...)
korrekt $(fileName)
bei "Kompilierzeit". $(if ifeq...)
, ich habe auch $(ifeq ...)
ausprobiert, was anscheinend ignoriert wurde. if
(d. h. ifeq
ohne $(if...)
) innerhalb einer Funktion ergibt /bin/sh: ifeq: command not found
. Kann jemand helfen zu erkennen, warum meine Kondition nicht so ist, wie ich es erwarte (oder warum ich das falsche Ding erwarte)?
Vorbehalt: Ich weiß, dass es noch Fehler gibt, die ausgearbeitet werden müssen, wenn die Datei nicht existiert, aber das sollte im Vergleich zu dieser Hürde trivial sein.
$(if ...)
bedingte Funktion wird beim ersten als true
ausgewertet Das Argument ist nicht leer. In Ihrem Fall ist die Bedingung ein Literaltext: ifeq "foo" "bar"
, der offensichtlich nicht leer ist.
ifeq
/ ifneq
conditionals sind in der Tat Richtlinien, funktioniert nicht. Sie können nicht innerhalb der Variablendefinition und in Funktionen verwendet werden.
Zurück zu Ihrem Beispiel, um die Zeichenfolge für die Gleichheit innerhalb der Bedingung zu testen, verwenden Sie Funktionen wie filter
und findstring
:
BTW könnte zur besseren Lesbarkeit auch in ein Inline-Formular umgewandelt werden:
%Vor%Ich habe dieses Problem erkannt und festgestellt, dass Sie das Ergebnis der "Filter" -Funktion im "Bedingung" -Teil der "if" -Funktion verwenden können. Hier ist ein Beispiel, das nützlich ist, um ein PDF entweder unter Linux (mit "evince") oder in OSX mit "open" zu öffnen.
%Vor% Sie scheinen die Arbeitsweise von $(if
falsch zu verstehen. Aus den Make-Info-Dokumenten:
$ (wenn BEDINGUNG, DANN-TEIL [, SONST-TEIL]) ' Die Funktion 'if' bietet Unterstützung für bedingte Erweiterungen in a funktionaler Kontext
Das erste Argument CONDITION hat zuerst alle vorhergehenden und Nachgestellte Leerräume entfernt, dann wird erweitert. Wenn es erweitert wird jede nicht leere Zeichenfolge, dann wird die Bedingung als wahr betrachtet. Wenn es zu einer leeren Zeichenfolge erweitert wird, wird die Bedingung berücksichtigt falsch sein.
In allen Ihren Beispielen ist Ihre Bedingung etwas wie ifeq SOMETHING OTHERTHING
- was eine nicht leere Zeichenkette ist (von ifeq
unabhängig von den anderen Dingen) und daher als wahr behandelt wird.
Wenn Sie überprüfen möchten, ob Ihre Betriebssystemversion Linux oder eine andere ist und wenn es sich um Linux handelt, dann möchten Sie eine Nachricht drucken, dann können Sie folgende Schritte ausführen:
%Vor%, bevor ich mit ifeq versucht habe, aber es hat nur den else-Teil gedruckt. Mein Betriebssystem ist Linux, ubuntu.
Wenn jemand diese Antwort gefunden hat, sollte sie geändert werden, damit sie auch eine bessere Antwort geben können.