pkg-config

pkg-config
Originalförfattare James Henstridge; omskriven av Havoc Pennington
Utvecklare Tollef Fog Heen / freedesktop.org
Initial release 2000 ; 23 år sedan ( 2000 ) eller tidigare
Stabil frisättning
0.29.2 / 20 mars 2017 ; för 5 år sedan ( 2017-03-20 )
Förvar gitlab .freedesktop .org /pkg-config /pkg-config
Skrivet i C
Operativ system Unix-liknande
Typ Programmeringsverktyg
Licens GNU GPL
Hemsida www .freedesktop .org /wiki /Software /pkg-config /

pkg-config är ett datorprogram som definierar och stöder ett enhetligt gränssnitt för att söka efter installerade bibliotek i syfte att kompilera programvara som är beroende av dem. Det tillåter programmerare och installationsskript att arbeta utan explicit kunskap om detaljerad bibliotekssökvägsinformation. pkg-config designades ursprungligen för Linux , men det är nu även tillgängligt för BSD , Microsoft Windows , macOS och Solaris .

Den matar ut olika information om installerade bibliotek. Denna information kan inkludera:

Den första implementeringen skrevs i skal. Senare skrevs det om i C med hjälp av GLib -biblioteket.

Synopsis

När ett bibliotek är installerat (automatiskt genom användning av ett RPM , deb , eller annat binärt paketeringssystem eller genom att kompilera från källan), bör en .pc -fil inkluderas och placeras i en katalog med andra .pc -filer (den exakta katalogen) är beroende av systemet och beskrivs i pkg-config man-sidan). Den här filen har flera poster.

Dessa poster innehåller vanligtvis en lista över beroende bibliotek som program som använder paketet också behöver kompilera. Poster inkluderar vanligtvis även platsen för rubrikfiler , versionsinformation och en beskrivning.

Här är ett exempel på en .pc -fil för libpng :





 
 
     
 
   
  prefix  =  /usr/local  exec_prefix  =  ${  prefix  }  libdir  =  ${  exec_prefix  }  /lib  includeir  =  ${  exec_prefix  }  /include  Namn  :  libpng  Beskrivning  :  Laddar  och  sparar  PNG-  filer  Version  :  1.2.8  Libs  :  -L  ${  libdir  }  -lpng12  -lz  Cflags  :  -I  ${  includeir  }  /libpng12 

Den här filen visar hur libpng informerar om att dess bibliotek kan hittas i /usr/local/lib och dess rubriker i /usr/local/include , att biblioteksnamnet är libpng och att versionen är 1.2.8. Den ger också de ytterligare länkflaggor som behövs för att kompilera kod som använder detta bibliotek.

Här är ett exempel på användning av pkg-config under kompilering:

 $  gcc -o  test  test.c  $(  pkg-config --libs --cflags libpng  ) 

pkg-config kan användas av byggautomationsprogram som CMake .

Jämförelse med libtool

GNU Libtool är en alternativ lösning för att hantera sökvägar, beroenden och nödvändiga flaggor vid länkning till ett bibliotek. Det finns några skillnader i tillvägagångssättet:

  • pkg-config måste anropas explicit för varje beroende, medan libtool avslutar anropet till kompilatorn.
  • pkg-config har alternativet --static för att skilja mellan statisk och dynamisk länkning, för ett statiskt bygge skickas hela listan med beroenden till kompilatorn. libtool skiljer inte mellan statisk och dynamisk länkning och skickar alltid igenom hela listan över beroenden.
  • libtool är bara användbart om både applikationen och biblioteket är byggda med libtool, medan bibliotek skrivet på vilket språk som helst kan skicka en .pc- fil.
  • pkg-config förlitar sig på bibliotekets sökväg, medan libtool refererar till bibliotek med deras absoluta sökväg. Detta orsakar byggfel med libtool när till exempel ett bibliotek flyttas från /lib till /usr/lib .

Alternativa implementeringar

externa länkar