Befehle "buendeln"



  • Hey Ihr,

    ich hab da eine (wahrscheinlich triviale) Frage:

    ich habe ein C++ Programm, das ich ganz oft leicht veraendern, dann kompilieren, linken und laufen lassen muss.

    Nu wuerd ich ganz gerne nicht immer neben dran sitzen und erst den compilier-befehl eingeben, warten bis compiliert, dann den link-befehl eingeben, warten bis gelinkt, laufen lassen usw

    Es muss doch irgendwie eine Moeglichkeit geben, die 3 Befehle zu buendeln, so dass der Computer von alleine eins nach dem anderen ausfuehrt.

    Ich hab schon je ein "alias" fuer die befehle. Meine drei Schritte sind:

    ncc bla.cpp
    ncc2bla
    bla

    Also: wie kann ich die drei verbinden?
    Wenn ich sie einfach nacheinander in die kommandozeile eintippe und return druecke, gibts nur fehlermeldungen.

    Wer is schlauer als ich? 😃



  • Suchst Du make(1), oder willst Du wissen, wie man Shellscripte schreibt?



  • shellscript?

    so a la:
    bla.sh erstellen, "chmod 777 bla.sh" ausführen
    reinschreiben:

    ncc bla.cpp
    ncc2bla
    bla

    und immer wenns laufen soll ./bla.sh eingeben. fertig.
    mfg
    Desire

    ps: falls es das is was du wolltest



  • ---[EDIT]ups, falscher button[/EDIT]---

    [ Dieser Beitrag wurde am 25.06.2003 um 19:30 Uhr von Desire editiert. ]



  • Aeh, keine Ahnung, ob ich ein make(1) oder ein Shellscript will. Was is der Unterschied?? (nicht hauen!!)

    Ich probier jetzt mal das mit dem bla.sh
    Ich mach also ein file bla.sh und da kommen genau die drei Zeilen rein.
    Und wo kommt da das chmod 777 bla.sh hin?? 😕 😕

    AchtungAnfaenger



  • Hi

    Da ich mit emacs schreibe.
    Schreib ich auch noch folgendes ins script

    #!/bin/bash
    
    g++ -o bla bla.cpp
    rm *.o
    rm *.cpp~
    rm *.h~
    rm *.c~
    

    [ Dieser Beitrag wurde am 25.06.2003 um 19:41 Uhr von prolog editiert. ]



  • spätestens wenn du so an die 5..10 Dateien hast, die jedesmal compiliert werden, wirst du dich nach make sehnen.



  • Hi

    Wenn du das skript geschrieben und unter bla.sh oder was auch immer abgespeichert hast. Gibst du am prompt chmod 777 bla.sh ein.
    Oder aber chmod u+x blah.sh.
    Siehe hierzu man chmod.

    Das shell skript is so aber relativ unflexibel
    Also entweder erweiterstest du es oder benutzt make.
    Ich würde dir make empfehlen.

    Eins noch:
    Wenn du demnächst mal wieder n shell script brauchst, tipp erstmal man bash
    oder was auch immer deine Shell ist. 😉



  • He,

    danke fuer die vielen und schnellen Antworten!! Hier geht ja echt die Post ab 😉

    "make" ist das, wo man sich ein Makefile schreibt und da kommen dann alle Befehle rein und ausfuehren kann man das ganze mit "make", oder?

    Kennt wer ne gute, anfaengerfreundliche (sprich idiotensichere) Makefile-Erklaerung irgendwo im Netz oder so?

    Mit der ganzen "man"-Hilfe ist als Anfaenger irgendwie nich so der Hit.

    Planlose Gruesse 🙄 ,

    AchtungAnfaenger!



  • ne idiotensichere Anleitung zu make gibts (leider?) nicht. kannst ja mal das info-file durchgucken (für newbies: info make). oder, wenns nicht installiert ist, gucken ob du das html-äquivalent unter /usr/doc findest. Oder im Netz, www.gnu.org, danach suchen.



  • make lohnt sich bei ein-dateien-programmen ihmo nicht so ganz.

    ich habe zum assemblieren eine funktion definiert (in ~/.profile geschrieben):

    function assemble {
            if [ ! $1 ]; then
                    return 1;
            fi
            name=${1%%.s}
            as $name.s -o $name.o &&
            ld $name.o -o $name &&
            chmod +x $name &&
            ./$name
    }
    

    $1, $2, $3, .. sind die uebergebenen Parameter.
    die 5. Zeile ist afaik Bash-spezifisch, sollte sich aber auch anders loesen lassen. (falls ihr wisst wie, bitte schreibt es!)

    musst dann nur noch die kommandos ersetzen, dann sollte es gehen.



  • Bevor du mit MAKE oder Scripte etwas machst solltest du dein Programm vorerst mal überdenken.
    Ein Programm änderst man nur wenn man Funktionen hinzufügt/Entfernt/ändert oder sonstwas.
    Wenn du nur kleine Änderungen machst um z.B auf einen andere Datzei zuzugreigen dann etnwerder per Commandozeile die Parameter übergeben oder eine INI (Conf.)-Datei machen.



  • Hi,
    auch ich bin faul. daher hab ich dieses script

    #!/bin/bash
    # kompiliert dBaseTest
    
    vi einzelbefund.cc                 // editieren des Quelltextes
    make -f einzelbefund.mak           // make mit Angabe, was er machen soll
    if  [[ "&?" = "0" ]]               
    then
            einzelbefund               // kein Fehler, dann ausführen
    else
            echo Fehler beim kopieren= $?
    fi
    ~
    

    und die einzelbefund.mak :

    einzelbefund: einzelbefund.o dbase.o mystrings.o labor_utils.o einzelbefund.mak
            g++  einzelbefund.o dbase.o mystrings.o labor_utils.o  -oeinzelbefund
            cp   einzelbefund /home/www/labor/docs/cgi-bin/
            chmod 755 /home/www/labor/docs/cgi-bin/einzelbefund
    
    mystrings.o: mystrings.cc mystrings.hh
            g++ -c -Wall mystrings.cc
    
    labor_utils.o: labor_utils.cc labor_utils.hh
            g++ -c -Wall labor_utils.cc
    
    dbase.o: dbase.cc dbase.hh
            g++ -c -Wall dbase.cc
    
    einzelbefund.o: dbase.hh einzelbefund.cc
            g++ -c -Wall einzelbefund.cc
    

    Und dann sollte man ( wie oben schon gesagt) die überflüssgen files weglöschen)
    Weitere Fragen gern
    Hanns

    p.s. das Ganze wird mit ./makeeinzel aufgerufen
    noch ein p.s. : wenn Du DIch mit redirection der AUsgabe beschäftigts, dann kannst DU Deine Fehler noch in eine datei umleiten, Aber da wir jha nie fehler machen 😃 , brauchen wir das auch nicht.

    [ Dieser Beitrag wurde am 26.06.2003 um 08:23 Uhr von ^Hanns editiert. ]



  • HI

    @^Hans

    Iehhk. Du benutzt den VI? 😕



  • logo, DU nicht? 😞
    gibt es denn sonst noch was anderes 😃
    Hanns

    Aber mal im Ernst, so gehts doch am schnellsten, wenn man auf entfernten Rechnern was machen muß !?

    [ Dieser Beitrag wurde am 26.06.2003 um 12:25 Uhr von ^Hanns editiert. ]



  • Hi

    JO. Wusste nicht das du an nem Terminal sitzt.
    Ich bin immer local dran und da mach ich n großen Bogen um den VI.
    Nur kurz nach der Installation gehts halt nicht anders.


Anmelden zum Antworten