pkg-config
Originalförfattare | James Henstridge; omskriven av Havoc Pennington |
---|---|
Utvecklare | Tollef Fog Heen / freedesktop.org |
Initial release | 2000 | eller tidigare
Stabil frisättning | 0.29.2 / 20 mars 2017
|
Förvar | |
Skrivet i | C |
Operativ system | Unix-liknande |
Typ | Programmeringsverktyg |
Licens | GNU GPL |
Hemsida |
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:
- Parametrar (flaggor) för C eller C++ kompilator
- Parametrar (flaggor) för linker
- Version av paketet i fråga
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
- PkgConfig – Pure - Perl Core-Only ersättning för pkg-config
- ruby-gnome/pkg-config – Implementering av pkg-config i Ruby
externa länkar
- pkg-config home på freedesktop.org
- Linux User Commands Manual –
- OpenBSD General Commands Manual –