[LINUX] Organisez l'utilisation super basique des Autotools et de pkg-config

Objet de l'article

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.

Aperçu des outils

Autotools

Autotools Tutorial

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.

échantillon

environnement

Procédure de construction et d'exécution

Construire

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

Courir

./src/hello
hello world

Plongez dans l'échantillon

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@

Résumé

J'ai su ce que je faisais pendant un moment.

Recommended Posts

Organisez l'utilisation super basique des Autotools et de pkg-config
Organiser la signification des méthodes, des classes et des objets
Python - Explication et résumé de l'utilisation des 24 meilleurs packages
L'histoire de Python et l'histoire de NaN
Ceci et celui de la notation d'inclusion.
[Python] Visualisez la chaleur de Tokyo et de la préfecture ○○ (mémo d'utilisation de DataFrame)
Gratter l'historique d'utilisation du cycle communautaire
Revoir le concept et la terminologie de la régression
L'utilisation de TensorBoard a légèrement changé
Organisation de bibliothèques professionnelles compétitives ~ dés ~
À propos du comportement de copy, deepcopy et numpy.copy
Résumé des différences entre PHP et Python
Compréhension complète des concepts de Bellmanford et Dyxtra
La réponse de "1/2" est différente entre python2 et 3
Changer la couleur des erreurs et avertissements Fabric
Comparez la vitesse d'ajout et de carte Python
Visualisation de l'état d'utilisation de l'évier dans l'entreprise
Description générale des notificateurs CPUFreq core et CPUFreq
J'ai lu et implémenté les variantes de UKR
Prise en compte des forces et faiblesses de Python
[Python] Type de classe et utilisation du module datetime
Les parties sympas et regrettables de Cloud Datalab
Prise en compte de la différence entre la courbe ROC et la courbe PR
Obtenez le titre de Yahoo News et analysez les sentiments
Scraping de l'historique d'utilisation du cycle de la communauté Version PhantomJS
L'histoire de Python sans opérateurs d'incrémentation et de décrémentation.
Déterminer et traiter automatiquement l'encodage du fichier texte
relation entre la série de nombres de Fibonacci et le nombre d'or
Le processus d'installation d'Atom et de l'exécution de Python
Prenez note de la liste des utilisations de base de Pandas
Visualisez la gamme d'insertions internes et externes avec python
[FSL] Mesure du segment et du volume du noyau cérébral basal (noyaux gris centraux)
Pensez à la nouvelle génération de Rack et WSGI
Référence et modification de la limite supérieure récursive Python
J'ai vérifié les versions de Blender et Python
J'ai vérifié le système d'exploitation et le shell par défaut de docker-machine
Visualisation de la connexion entre le malware et le serveur de rappel
[Django 2.2] Trier et obtenir la valeur de la destination de la relation
Notes personnelles sur l'intégration de vscode et anaconda
[Introduction à Python] Utilisation basique de la bibliothèque matplotlib
Estimer grossièrement l'utilisation totale de la mémoire d'un objet
Vérifiez le type et la version de la distribution Linux
Animer les bases de la planification dynamique et des problèmes de sac à dos