2009-08-25 12 views
2

Ich brauche etwas wie make, d. H Abhängigkeiten + Ausführen von Shell-Befehle, wo fehlgeschlagenen Befehl die Ausführung beendet. Aber tiefer integriert mit Shell dh jetzt in make wird jede Zeile in einem separaten Kontext ausgeführt, so dass es nicht einfach ist, Variable in einer Zeile zu setzen und sie in der folgenden Zeile zu verwenden (Ich will kein Escapezeichen am Ende der Zeile, weil es nicht ist lesbar). Ich möchte einfache Syntax (kein XML) mit Kontrollfluss und Funktionen (was in make fehlt). Es muss keine Unterstützung für die Kompilierung haben. Ich muss nur einige Komponenten zusammenbauen, die mit Autotools erstellt wurden, sie verpacken, Tests auslösen und Ergebnisse veröffentlichen.Werkzeug für die Erstellung von Software

Ich sah an: machen, ant, maven, scons, waf, nant, harken, Nachteile, cmake, Marmelade und sie passen nicht meine Bedürfnisse.

+0

klingt wie Shell-Skripten Ihre einzige Option –

Antwort

1

Angesichts der Tatsache, dass Sie Kontrollfluss, Funktionen, alles in der gleichen Umgebung und ohne XML wollen, klingt es wie Sie die verfügbaren Shell-Skriptsprachen (sh/bash/ksh/zsh) oder Perl verwenden möchten eigene Lieblings-Skriptsprache hier!).

Ich beachte, dass Sie nicht auf a-a-p geschaut haben. Ich kenne das nicht, außer dass es ein System von Leuten ist, die uns Vim gebracht haben. Vielleicht möchten Sie sich das genauer ansehen.

+0

Downvoted warum? –

0

Eine Mischung aus Makefile und einer Skriptsprache zur Auswahl, welches Makefile gleichzeitig ausgeführt werden könnte.

2

Werfen Sie einen Blick auf fabricate.

Wenn dies Ihre Anforderungen nicht erfüllt oder wenn Sie Ihr Build-Skript nicht in Python schreiben möchten, können Sie auch eine Kombination aus Shell-Skripten und fabricate verwenden. Schreiben Sie das Skript so, als würden Sie Ihr Projekt manuell erstellen, aber erstellen Sie Build-Aufrufe mit "fabriate.py", damit Build-Abhängigkeiten automatisch verwaltet werden.

Einfaches Beispiel:

#!/bin/bash 
EXE="myapp" 
CC="fabricate.py gcc" # let fabricate handle dependencies 
FILES="file1.c file2.c file3.c" 
OBJS="" 

# build link 
for F in $FILES; do 
    echo $CC -c $F 
    if [ $? -ne 0 ]; then 
     echo "Build failed while compiling $F" >2 
     exit $? 
    fi 
    OBJS="$OBJS ${F/.c/.o}" 
done 

# link 
$CC -o $EXE $OBJS 
0

Ich habe die gleichen Bedürfnisse haben. Meine derzeitige Lösung besteht darin, Makefiles zu verwenden, um die Graphabhängigkeit genau darzustellen (Sie müssen "Recursive make considered harmful" lesen). Diese Makefiles lösen Bash-Skripte aus, die Makefiles-Variablen als Parameter annehmen. Auf diese Weise müssen Sie nicht mit dem Problem des Shell-Kontextes umgehen und Sie erhalten eine klare Trennung zwischen den Abhängigkeiten und den Aktionen.

Ich überlege mir gerade waf wie es gut aussieht und schnell genug aussieht.

0

Vielleicht möchten Sie sich ansehen SCons; Es ist ein Make-Ersatz in Python geschrieben.

3

einen Blick auf doit

  • Sie Shell-Befehle oder Python-Funktionen verwenden können, Aufgaben definieren (Builds).
  • sehr einfach zu bedienen. Skripte in Python schreiben. „No api“ (Sie brauchen nicht alles in Ihrem Skript zu importieren)
  • es eine gute Unterstützung hat Abhängigkeiten zu verfolgen und Ziele
Verwandte Themen