Font

make und flex

[thread]14343[/thread]


hide all open all
  • close +12 replies
  • close close perltiptop  2009-12-05 22:20 #128997 #128997
    User since
    2009-04-07
    4 articles
    [default_avatar]  
    Hallo Perlianer, auch wenn das nicht perl ist....

    folgende make file moechte ich zum laufen bringen unter windows.
    Das program flex habe ich vom http://flex.sourceforge.net/ runtergeladen.

    Nun die Frage: wie muss der Path zum Aufruf von flex und libfl.a lauten?

    Fehlermeldung
    Der Befehl "C:\flex\flex-2.5.35\flex" ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.
    *** No rule to make target -lfl', needed by `count_words'. Stop.

    count_words: count_words.o lexer.o -lfl
    gcc count_words.o lexer.o -lfl -ocount_words

    count_words.o: count_words.c
    gcc -c count_words.c

    lexer.o: lexer.c
    gcc -c lexer.c

    lexer.c: lexer.l
    flex -t lexer.l > lexer.c
    • close perltiptop  2009-12-05 22:58 #128998 #128998
      User since
      2009-04-07
      4 articles
      [default_avatar]  
      noch was,

      wo bekommt man ein libfl.a fuer Windows?
    • close +6 replies
    • close close murphy  2009-12-05 23:00 #128999 #128999
      User since
      2004-07-19
      1307 articles
      [Homepage]

      user image  
      2009-12-05T21:20:28 perltiptop
      [...]
      folgende make file moechte ich zum laufen bringen unter windows.

      Das ist noch nicht aussagekräftig genug. Windows + MinGW, Windows + Cygwin, Windows + MSVC oder irgendetwas ganz anderes?

      Quote

      Das program flex habe ich vom http://flex.sourceforge.net/ runtergeladen.

      Dumme Frage: Hast Du es auch kompiliert und installiert?

      Quote

      Nun die Frage: wie muss der Path zum Aufruf von flex und libfl.a lauten?

      Das kannst Du nur selbst beantworten, denn es hängt davon ab, wohin Du diese Dateien installiert hast.

      Quote
      [...]
      Code:
      1
      2
      count_words: count_words.o lexer.o -lfl
      gcc count_words.o lexer.o -lfl -ocount_words
      [...]

      Oh je, was für ein komisches Makefile. Normalerweise würde man eher so etwas schreiben:
      Code:
      1
      2
      count_words: count_words.o lexer.o
      gcc $^ -o $@ -lfl

      Man muss ja Dinge, die Make in Variablen speichert nicht sinnlos wörtlich wiederholen. Und da -lfl nicht der Name eines Zieles ist, das Make erstellen kann, sollte man es auch nicht als Abhängigkeit angeben.


      PS: Der Beitrag wäre wohl besser in den Sektionen "C und C++" oder "sonstige Sprachen, auch PHP" aufgehoben. Und [code]-Tags um Code, der nicht als Fließtext reformatiert werden sollte, würden auch nicht schaden.
      When C++ is your hammer, every problem looks like your thumb.
      • close +5 replies
      • close close guest Guest  2009-12-06 15:27 #129007 #129007
         
        Murphey,

        nur weil Du keine Ahnung von make und flex hast, muss etwas noch lange nicht sinnlos sein. libfl.a ist eine physikalische Datei und sehr wohl sinnvoll deren Existenz zu pruefen.

        Dumm ist wenn man absolute Pfade angibt. Es ist auch moeglich den relativen Path von libfl.a dynamisch zu ermitteln.

        • close +4 replies
        • close close murphy  2009-12-06 18:04 #129014 #129014
          User since
          2004-07-19
          1307 articles
          [Homepage]

          user image  
          Guest Guest
          [...]
          libfl.a ist eine physikalische Datei und sehr wohl sinnvoll deren Existenz zu pruefen.
          [...]

          Sicher sollte es irgendwo eine Datei libfl.a geben, wenn man statisch gegen die Laufzeitumgebung von Flex linken möchte. Für meinen Kommentar ist das allerdings irrelevant, denn im Makefile wird nirgends libfl.a erwähnt, sondern vielmehr -lfl als Abhängigkeit eines Ziels angegeben. Jedes der verbreiteten Make-Programme versucht in diesem Fall ein Ziel mit dem Namen -lfl zu bauen und da in dem Makefile nirgends ein solches Ziel deklariert ist und auch keine implizite Regel existiert, die auf diese Zielangabe passt, meldet Make einen Fehler, den der Originalposter in seinem Beitrag auch erwähnte. Make ist keinesfalls in der Lage magisch zu erkennen, dass -lfl ein Flag für den Linker sein könnte und nach der passenden Bibliotheksdatei zu suchen.

          Die Existenz von Bibliotheken und ihre Position im Dateisystem sollte man im Übrigen eher nicht in einem Makefile sondern in einem Konfigurationsschritt vor der Ausführung des Makefiles überprüfen.


          @Guest: Sorgfältige Lektüre der Beiträge und Nachdenken vor dem Schreiben verhindern unqualifizierte Beiträge. Und Beleidigungen nutzen hier niemandem.
          When C++ is your hammer, every problem looks like your thumb.
          • close guest HSHVH  2009-12-07 16:08 #129065 #129065
             
            Take it easy, der Stil des "Gastes" ist doch nicht schwer zu erkennen ...
          • close +2 replies
          • close close perltiptop  2010-01-06 08:36 #130091 #130091
            User since
            2009-04-07
            4 articles
            [default_avatar]  
            Murphey da bist du auf dem Holzweg, mein Script läuft nun auch mit dieser Abfrage. man muss eben wissen wie.
    • close betterworld  2009-12-06 13:16 #129005 #129005
      User since
      2003-08-21
      2363 articles
      [Homepage]

      user image  
      Move from Allgemeines zu Perl to C und C++

      Wie von murphy empfohlen :)
      To my continued amazement, the Perl folks are the only ones who never get upset. They just say "Haha, yeah, boy, you're right, it sure is ugly. Heh. Yeah, so, um, anyway, I'm going to get back to work now..." It's awesome. I've gained so much respect for them. src
    • close +3 replies
    • close close GwenDragon  2009-12-06 15:09 #129006 #129006
      User since
      2005-01-17
      6226 articles
      [Homepage]

      user image  
      Wo steht auf http://flex.sourceforge.net/, dass flex so für Windows geeignet ist, sich kompilieren lässt? Ich finde auf der Website von flex nichts.

      Ansonsten könnte es ja für MingW oder Cygwin schon ein flex geben:
      Für GnuWin32 gibt es flex.
      Für MSYS/MingW auch.
      Für Cygwin auch.
      • close +2 replies
      • close close guest perltiptop  2009-12-06 21:51 #129017 #129017
         
        Es handelt sich um GnuWin32.
        Der gcc idt von strawberry. Was muss getan werden, damit -lfl in diesem command:

        count_words: count_words.o lexer.o -lfl
        gcc count_words.o lexer.o -lfl -ocount_words
        in makefile erkannt wird, ohne den VPath zu bedienen.
        Fehlermeldung:
        C:\strawberry\c\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: can not find -lfl
        collect2: ld returned 1 exit status

        Vielen Dank.
        • close murphy  2009-12-07 16:03 #129064 #129064
          User since
          2004-07-19
          1307 articles
          [Homepage]

          user image  
          Wie ich bereits ausführlich erläutert habe, wird das -lfl unter den Abhängigkeiten des Zieles count_words auch dann noch einen Fehler von Make verursachen, wenn der Linker die entsprechende Bibliothek findet.

          Damit der Linker die Bibliothek libfl.a findet, muss selbige in einem Standardverzeichnis für Bibliotheken installiert werden. Wenn sie in irgendeinem anderen Verzeichnis installiert wurde, muss dem Linker zum Beispiel mit einem -L Flag mitgeteilt werden, wo er sie suchen soll.
          When C++ is your hammer, every problem looks like your thumb.

View all threads created 2009-12-05.

[Powered by Battie]
Powered by Perl
Powered by Pound
Some Icons are from
Fugue Icons
Impressum