Autotools et pkg-config qui se construisent bien sans modifier le script de construction même si l'environnement cible est différent. Je l'ai toujours utilisé d'une manière ou d'une autre, donc je vais régler ce que je fais dans mon propre périmètre.
Autotools
Wikipedia Autotools Autotools est un type d'outil et de cadre pour le développement de progiciels principalement dans des systèmes d'exploitation (OS) basés sur Unix. Cet outil facilite l'adaptation des packages à une grande variété d'environnements compatibles UNIX. Autotools se compose principalement d'autoconf / automake / libtools.
autoconf
Générez configure à partir de configure.ac. La prise en charge des compilateurs croisés est gérée par configure.
Si vous créez un environnement de développement croisé avec Yocto, après avoir source la chaîne d'outils, configurez-le comme indiqué ci-dessous.
./configure ${CONFIGURE_FLAGS}
Si vous regardez le contenu de $ {CONFIGURE_FLAGS}, vous pouvez voir qu'il semble que vous définissez la variable d'environnement du compilateur croisé.
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
Générez Makefile.in à partir de Makefile.am. Au moment de Makefile.in, les paramètres spécifiques à l'environnement ne sont pas reflétés. Le Makefile final est généré en configurant l'ajout de paramètres spécifiques à l'environnement à Makefile.in.
libtool
Je ne l'utilise pas, alors je vais l'omettre.
pkg-config
Wikipedia pkg-config pkg-config est un moyen de fournir divers indicateurs et chemins requis lors de l'utilisation de la bibliothèque avec une interface commune.
En d'autres termes, la bibliothèque est facile à utiliser.
Ubuntu 16.04
bonjour le monde en utilisant glib
Je ne l'ai pas essayé dans un environnement propre, mais vous devriez avoir tout ce dont vous avez besoin à ↓!
sudo apt-get install -y build-essential libglib2.0-0 libglib2.0-dev autoconf automake libtool
Construire
git clone https://github.com/tomoyuki-nakabayashi/autotools-hello.git
cd autotools-hello
autoreconf -fi
./configure
make
Courir
./src/hello
hello world
Sauf pour l'utilisation de glib, j'ai fait référence à "Hello, World" dans GNU Autotools.
configure.ac
Ajout d'une ligne pour archiver configure.ac si glib est dans l'environnement de construction.
PKG_CHECK_MODULES(GLIB, [glib-2.0])
PKG_CHECK_MODULES est une macro qui s'interface avec autoconf et pkg-config. Dans le premier argument, spécifiez le préfixe utilisé pour les indicateurs de compilation et les références de bibliothèque. Dans le deuxième argument, spécifiez le nom du module trouvé dans le chemin de recherche de pkg-config. (Dans mon environnement, le chemin d'inclusion est "/usr/include/glib-2.0/", donc "glib" n'est pas bon et vous devez le définir sur "glib-2.0")
src/Makefile.am Ajoutez des indicateurs de compilation et des références de bibliothèque à l'aide du préfixe spécifié dans PKG_CHECK_MODULES dans configure.ac.
hello_CFLAGS = \
@CFLAGS@ \
@GLIB_CFLAGS@
hello_LDADD = \
@GLIB_LIBS@
Qu'est-ce que ça veut dire?
En regardant le journal lorsque make est exécuté, il semble que gcc soit exécuté comme indiqué dans ↓.
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
Si vous faites en éditant Makefile.am, CFLAGS est "-g -O2" et GLIB_CFLAGS est "-I / usr / lib / x86_64-linux-gnu / glib-2.0 / include" On peut voir que ", GLIB_LIBS fonctionne avec" -lglib-2.0 ". En regardant le src / Makefile, il ressemble à ceci: Je vois.
GLIB_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
GLIB_LIBS = -lglib-2.0
Lors de l'utilisation de l'environnement cross-build créé par Yocto, c'est comme suit. Je vois.
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
Au fait, au moment de src / Makefile.in, ce n'est pas un chemin spécifique à l'environnement. C'est ce que configure reflète les paramètres spécifiques à l'environnement. Je vois.
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
J'ai su ce que je faisais pendant un moment.
Recommended Posts