C Lib mit qmake einbinden [Erledigt]



  • Hallo,

    ich versuche gerade die C-Lib libdmtx einzubinden, in dem ich einfach in einer pri-Datei die Sourcen angebe:

    INCLUDEPATH  += $$PWD
    
    HEADERS += \
        $$PWD/dmtxstatic.h \
        $$PWD/dmtx.h
    
    SOURCES += \
        $$PWD/dmtxencode.c \
        $$PWD/dmtxencodestream.c \
        $$PWD/dmtxencodescheme.c \
        $$PWD/dmtxencodeoptimize.c \
        $$PWD/dmtxencodeascii.c \
        $$PWD/dmtxencodec40textx12.c \
        $$PWD/dmtxencodeedifact.c \
        $$PWD/dmtxencodebase256.c \
        $$PWD/dmtxdecode.c \
        $$PWD/dmtxdecodescheme.c \
        $$PWD/dmtxmessage.c \
        $$PWD/dmtxregion.c \
        $$PWD/dmtxsymbol.c \
        $$PWD/dmtxplacemod.c \
        $$PWD/dmtxreedsol.c \
        $$PWD/dmtxscangrid.c \
        $$PWD/dmtximage.c \
        $$PWD/dmtxbytelist.c \
        $$PWD/dmtxtime.c \
        $$PWD/dmtxvector2.c \
        $$PWD/dmtxmatrix3.c
    

    Das kompiliert allerdings nicht, weil fast jede C-Datei Typen oder Makros verwendet, die entweder in Headern definiert sind oder sogar direkt in anderen C-Dateien, wofür keine Header existieren! Die Sache ist die: Keine einzige C-Datei hat ein include! Das wird wohl alles über das Linken gefixt. Da meine Makefile-Kenntnisse nicht gerade gut sind, ist die Frage, wie ich das Problem am elegantesten löse.

    Danke im Voraus!
    Steffo



  • Das geschieht wohl über "precompiled headers". Für Qt s. Using Precompiled Headers, also:

    PRECOMPILED_HEADER = \
        $$PWD/dmtxstatic.h \
        $$PWD/dmtx.h
    

    (oder nur $$PWD/dmtx.h)



  • Die Library verwendet einen sog. "unity build", d.h. es wird nur ein .c File kompiliert (nämlich dmtx.c) welches alle anderen .c Files inkludiert -- und davor die nötigen Headers.

    Du versuchst dagegen alle .c Files einzeln zu bauen. Darauf ist die Library nicht ausgelegt und daher geht das auch nicht.



  • Danke, das werde ich mir mal anschauen!

    Viele Grüße,
    Steffo



  • Hat geklappt, danke! 🙂


Anmelden zum Antworten