Mittwoch, Januar 22, 2020

Wie konditioniere ein makefile basierend auf grep-Ergebnisse?

Ich bin auf der Suche nach einem Weg, um aus der Patsche helfen, der ein makefile wenn eine bestimmte Zeichenfolge nicht gefunden beim überprüfen der version von ein Werkzeug.

Den grep-Ausdruck ich bin auf der Suche entspricht:

dplus -VV | grep 'build date and time: Nov  1 2009 19:31:28'

gibt eine passende Zeile, wenn Sie die richtige version von dplus installiert ist.

Wie kann ich eine bedingte in mein makefile basierend auf dieser Formel?

  • Welche ist das? gnu?
  • Ja. Speziell in Cygwin, aber das ist nur GNU.
InformationsquelleAutor Mike Lewis | 2009-12-09

3 Kommentare

  1. 13

    Hier ist ein weiterer Weg, der in einem GNU Make:

    DPLUSVERSION = $(shell dplus -VV | grep 'build-Datum und-Zeit: Nov 1 2009 19:31:28') 
    
    target_of_interest: do_things do_things_that_uses_dplus 
    
    do_things: 
    ... 
    
    
    do_things_that_uses_dplus: 
    ifeq ($(DPLUSVERSION),) 
    $(error die richtige version von dplus installiert ist) 
    endif 
    ... 
    

    Dieses Ziel kann sein, etwas reales, oder nur ein PHONY-target, auf dem die echten hängen.

    • Arbeitete ein Charme, und das ifeq…$(error…) lassen Sie mich speien eine Fehlermeldung, lassen die Entwickler wissen, warum Ihre Bau-getötet wurde.
    • Warnung! $(error ) auslöst, wenn es bewertet. das bedeutet, dass, wenn DPLUSVERSION auslösen der Fehlerbedingung do_things wird nie ausführen. bearbeitet zu lösen. gnu.org/software/make/manual/html_node/…
    • Ich glaube nicht, dass Sie getestet Ihre Lösung.
    • Recht, wurde mitgerissen versuchen zu tun, ein schnelles Bearbeiten. gut, habe gerade ein weiteres schnelles Bearbeiten ohne zu denken zu viel, wieder 🙂 es wird wahrscheinlich laufen die Dinge nicht in Ordnung, wenn -j ist größer als 1… aber sollte jetzt OK sein andere als das.
  2. 3

    Hier ist eine Möglichkeit:

    .PHONY: check_dplus
    
    check_dplus:
        dplus -VV | grep -q "build date and time: Nov  1 2009 19:31:28"
    

    Wenn grep findet keine übereinstimmung, soll es geben

    make: *** [check_dplus] Error 1
    

    Dann haben Sie Ihre anderen Ziele hängen von der check_dplus Ziel.

  3. 2

    Wenn dies gnu make, die Sie tun können,

     your-target: $(objects)
         ifeq (your-condition)
             do-something
         else
             do-something-else
         endif
    

    Sehen Sie sich hier Makefile contionals

    Wenn Ihr make-unterstützt keine Bedingungen, Sie können immer tun

     your-target:
         dplus -VV | grep -q "build date and time: Nov  1 2009 19:31:28" || $(MAKE) -s another-target; exit 0
         do-something
    
     another-target:
         do-something-else
    

Kostenlose Online-Tests