[LINUX] Organisieren Sie die grundlegende Verwendung von Autotools und pkg-config

Zweck des Artikels

Autotools und pkg-config, die sich gut erstellen lassen, ohne das Build-Skript zu ändern, auch wenn die Zielumgebung anders ist. Ich habe es immer irgendwie benutzt, also werde ich herausfinden, was ich in meinem eigenen Bereich mache.

Werkzeugübersicht

Autotools

Autotools Tutorial

Wikipedia Autotools Autotools ist eine Art Tool und Framework für die Entwicklung von Softwarepaketen, hauptsächlich in Unix-basierten Betriebssystemen (OS). Dieses Tool erleichtert das Anpassen von Paketen an eine Vielzahl von UNIX-kompatiblen Umgebungen. Autotools bestehen hauptsächlich aus autoconf / automake / libtools.

autoconf

Generieren Sie configure aus configure.ac. Die compilerübergreifende Unterstützung wird von configure übernommen. Wenn Sie mit Yocto eine entwicklungsübergreifende Umgebung erstellen, konfigurieren Sie nach der Erstellung der Toolkette Folgendes. ./configure ${CONFIGURE_FLAGS}

Wenn Sie sich den Inhalt von $ {CONFIGURE_FLAGS} ansehen, sehen Sie, dass Sie anscheinend die Umgebungsvariable des Cross-Compilers festlegen. echo ${CONFIGURE_FLAGS} --target=arm-poky-linux-gnueabi --host=arm-poky-linux-gnueabi --build=x86_64-linux --with-libtool-sysroot=/opt/poky/2.2+snapshot/sysroots/cortexa7hf-neon-vfpv4-poky-linux-gnueabi automake

Generieren Sie Makefile.in aus Makefile.am. Zum Zeitpunkt von Makefile.in werden umgebungsspezifische Einstellungen nicht berücksichtigt. Das endgültige Makefile wird durch Konfigurieren des Hinzufügens umgebungsspezifischer Einstellungen zu Makefile.in generiert.

libtool

Ich benutze es nicht, also werde ich es weglassen.

pkg-config

Wikipedia pkg-config pkg-config ist ein Mittel, um verschiedene Flags und Pfade bereitzustellen, die erforderlich sind, wenn die Bibliothek mit einer gemeinsamen Schnittstelle verwendet wird.

Mit anderen Worten, die Bibliothek ist einfach zu bedienen.

Stichprobe

Umgebung

Build & Run-Prozedur

Bauen

git clone https://github.com/tomoyuki-nakabayashi/autotools-hello.git
cd autotools-hello
autoreconf -fi
./configure
make

Lauf

./src/hello
hello world

Tauchen Sie ein in die Probe

Mit Ausnahme der Verwendung von glib habe ich in GNU Autotools auf ["Hello, World"] verwiesen (https://qiita.com/narupo/items/f63b8e768f17ce50f398).

configure.ac Es wurde eine Zeile hinzugefügt, um in configure.ac zu überprüfen, ob sich glib in der Build-Umgebung befindet. PKG_CHECK_MODULES(GLIB, [glib-2.0])

PKG_CHECK_MODULES ist ein Makro, das mit autoconf und pkg-config verbunden ist. Geben Sie im ersten Argument das Präfix an, das für Flags zur Kompilierungszeit und Bibliotheksreferenzen verwendet wird. Geben Sie im zweiten Argument den Modulnamen an, der im Suchpfad von pkg-config gefunden wurde. (In meiner Umgebung lautet der Include-Pfad "/usr/include/glib-2.0/", daher ist "glib" nutzlos und muss "glib-2.0" sein.)

src/Makefile.am Fügen Sie Kompilierungsflags und Bibliotheksreferenzen mit dem in PKG_CHECK_MODULES in configure.ac angegebenen Präfix hinzu.

hello_CFLAGS = \
        @CFLAGS@ \
        @GLIB_CFLAGS@ 

hello_LDADD = \
        @GLIB_LIBS@ 

Was bedeutet das? Wenn man sich das Protokoll ansieht, wenn make ausgeführt wird, scheint es, dass gcc wie in ↓ gezeigt ausgeführt wird. gcc -g -O2 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -g -O2 -o hello hello-main.o -lglib-2.0

Wenn Sie während der Bearbeitung von Makefile.am erstellen, lautet CFLAGS "-g -O2" und GLIB_CFLAGS "-I / usr / lib / x86_64-linux-gnu / glib-2.0 / include". Es ist ersichtlich, dass ", GLIB_LIBS mit" -lglib-2.0 "funktioniert. Wenn man sich das src / Makefile ansieht, sieht es so aus: Das war's.

GLIB_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
GLIB_LIBS = -lglib-2.0

Bei Verwendung der von Yocto erstellten Cross-Build-Umgebung ist dies wie folgt. Das war's.

GLIB_CFLAGS = -I/opt/poky/2.2+snapshot/sysroots/cortexa7hf-neon-vfpv4-poky-linux-gnueabi/usr/include/glib-2.0 -I/opt/poky/2.2+snapshot/sysroots/cortexa7hf-neon-vfpv4-poky-linux-gnueabi/usr/lib/glib-2.0/include
GLIB_LIBS = -lglib-2.0

Zum Zeitpunkt von src / Makefile.in handelt es sich übrigens nicht um einen umgebungsspezifischen Pfad. Die Konfiguration spiegelt die umgebungsspezifischen Einstellungen wider. Das war's.

GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@

Zusammenfassung

Ich wusste für einen Moment, was ich tat.

Recommended Posts

Organisieren Sie die grundlegende Verwendung von Autotools und pkg-config
Organisieren Sie die Bedeutung von Methoden, Klassen und Objekten
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
Die Geschichte von Python und die Geschichte von NaN
Dies und das der Einschlussnotation.
[Python] Visualisieren Sie die Hitze der Präfekturen Tokio und XX (DataFrame-Nutzungsnotiz)
Scraping des Nutzungsverlaufs des Community-Zyklus
Überprüfen Sie das Konzept und die Terminologie der Regression
Die Verwendung von TensorBoard hat sich geringfügig geändert
Wettbewerbsfähige professionelle Bibliotheksorganisation ~ Würfel ~
Über das Verhalten von copy, deepcopy und numpy.copy
Zusammenfassung der Unterschiede zwischen PHP und Python
Vollständiges Verständnis der Konzepte von Bellmanford und Dyxtra
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Ändern Sie die Farbe von Fabric-Fehlern und Warnungen
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Visualisierte den Nutzungsstatus der Spüle im Unternehmen
Allgemeine Beschreibung des CPUFreq-Kerns und der CPUFreq-Benachrichtigungen
Ich habe die Varianten von UKR gelesen und implementiert
Berücksichtigung der Stärken und Schwächen von Python
[Python] Klassentyp und Verwendung des datetime-Moduls
Die schönen und bedauerlichen Teile von Cloud Datalab
Berücksichtigung des Unterschieds zwischen ROC-Kurve und PR-Kurve
Holen Sie sich den Titel der Yahoo News und analysieren Sie die Stimmung
Scraping Community Cycle Nutzungsverlauf PhantomJS-Version
Die Geschichte von Python ohne Inkrement- und Dekrementoperatoren.
Ermitteln und verarbeiten Sie die Codierung der Textdatei automatisch
Beziehung der Fibonacci-Zahlenreihe und des Goldenen Schnitts
Der Prozess der Installation von Atom und der Ausführung von Python
Notieren Sie sich die Liste der grundlegenden Verwendungszwecke von Pandas
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
[FSL] Segment- und Volumenmessung des basalen Hirnkerns (Basalganglien)
Denken Sie an das Rack und WSGI der nächsten Generation
Referenz und Änderung der rekursiven Python-Obergrenze
Ich habe mir die Versionen von Blender und Python angesehen
Ich habe das Standardbetriebssystem und die Shell der Docker-Maschine überprüft
Visualisierung der Verbindung zwischen Malware und dem Callback-Server
[Django 2.2] Sortieren und erhalten Sie den Wert des Beziehungsziels
Persönliche Hinweise zur Integration von vscode und anaconda
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
Schätzen Sie die Gesamtspeicherauslastung eines Objekts grob ab
Überprüfen Sie den Linux-Verteilungstyp und die Version
Animieren Sie die Grundlagen der dynamischen Planung und Rucksackprobleme