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.
Autotools
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.
Ubuntu 16.04
Hallo Welt mit Glib
Ich habe es nicht in einer sauberen Umgebung versucht, aber Sie sollten bei ↓ alles haben, was Sie brauchen!
sudo apt-get install -y build-essential libglib2.0-0 libglib2.0-dev autoconf automake libtool
Bauen
git clone https://github.com/tomoyuki-nakabayashi/autotools-hello.git
cd autotools-hello
autoreconf -fi
./configure
make
Lauf
./src/hello
hello world
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@
Ich wusste für einen Moment, was ich tat.
Recommended Posts