[Linux] [C / C ++] Remarques sur le système de construction Waf

Mise en garde

Ce document est confirmé par «waf-1.9.3». Veuillez vérifier avec Documents originaux car il peut y avoir des changements.

Aperçu

Résumé sur Waf, un outil de construction conçu par python

Waf définit un fichier appelé wscript et le construit.

Étant donné que les matériaux japonais sont solides, je pense que vous devriez essentiellement vous référer aux pages suivantes. (N'est-ce pas le dernier parce qu'il est traduit par des bénévoles? * Confirmation requise) The Waf Book

Les documents originaux en anglais sont les suivants. The Waf Book

mérite et démérite

mérite

Démérite

Préparation

Télécharger Waf

Téléchargez la source depuis Site officiel ou Github.

Télécharger directement le binaire d'exécution


$ wget --no-check-certificate https://waf.io/waf-1.9.3 -O waf

Construire à partir de la source


$ git clone https://github.com/waf-project/waf.git
$ cd waf
$ ./waf-light configure build
$ ls
build  build_system_kit  ChangeLog  configure  demos  DEVEL  docs  playground  README.md  tests  TODO  utils  waf  waflib  waf-light  wscript  zip

Vérifiez l'échantillon pour le moment

Si vous avez construit à partir des sources, il existe une démo dans le référentiel. Il existe des exemples dans différentes langues, vous pouvez donc vous y référer.

Test de construction d'exemple de langage C


$ cd demos
$ ls
asm  bisonflex  c  c++  csharp  d  dbus  fortran  glib2  intltool  java  jni  lua  mac_app  perl  precious  python  qt5  ruby  subst  tex  unit_test  vala  variants  wscript
$ cd c
$ ../../waf configure build
Setting top to                           : /home/user/work/waf/demos/c
Setting out to                           : /home/user/work/waf/demos/c/build
Checking for 'gcc' (C compiler)          : /usr/bin/gcc
Checking for code snippet                : yes
Checking for code snippet                : yes
Checking for code snippet                : yes
Checking for libraries                   : yes
Checking for library m                   : yes
Checking for large file support          : yes
Checking for inline                      : inline
Checking for endianness                  : little
Checking for headers in parallel         : started
... testing an arbitrary build function  : ok
... stdio                                : yes
... unistd                               : yes
... optional xyztabcd.h                  : no
... stdlib                               : aye
... malloc                               : yes
-> processing test results               : 1 test failed
Checking for header stdio.h              : yes
Checking for code snippet                : yes
'configure' finished successfully (1.405s)
Waf: Entering directory `/home/user/work/waf/demos/c/build'
[ 1/16] Creating build/program/b.h
[ 2/16] Creating build/abc.h
[ 3/16] Creating build/stlib/foo.h
[ 4/16] Processing wscript
[ 5/16] Trying again wscript
-Lm -Lncurses -L../wscript ayedoh -Laaa -L/home/user/work/waf/demos/c/wscript

-Lm -Lncurses -L../wscript ayedoh -Laaa -L/home/user/work/waf/demos/c/wscript

[ 6/16] Compiling stlib/main.c
[ 7/16] Compiling program/main.c
[ 8/16] Compiling shlib/test_shlib.c
[ 9/16] Compiling shlib/main.c
[10/16] Compiling stlib/test_staticlib.c
[11/16] Linking build/program/myprogram
[12/16] Linking build/shlib/libmy_shared_lib.so
[13/16] Linking build/stlib/libmy_static_lib.a
[14/16] Linking build/shlib/test_shared_link
[15/16] Linking build/stlib/test_static_link
[16/16] Symlinking build/shlib/libmy_shared_lib.so
Waf: Leaving directory `/home/user/work/waf/demos/c/build'
'build' finished successfully (1.162s)

Procédure d'implémentation de wscript

bases de wscript

waf définit la fonction dans wscript comme la * commande waf *. À titre d'exemple, la commande waf «bonjour» est définie ci-dessous.

échantillon


#! /usr/bin/env python
# encoding: utf-8

def hello(ctx):
    print('hello world')

Exécuter la commande waf bonjour


$ ./waf hello
hello world
'hello' finished successfully (0.001s)

Vous pouvez dire que la commande est en cours d'exécution en spécifiant «hello» comme commande d'exécution pour «waf».

Construire un projet C ++

Voir ci-dessous dans le document original The Waf Book

main.cpp


#include <iostream>

int main(int argc, char const* argv[])
{
    std::cout << "hoge" << std::endl;
    return 0;
}

C++Construisez le projet


#! /usr/bin/env python
# encoding: utf-8

def options(opt):
    opt.load('compiler_cxx')

def configure(conf):
    conf.load('compiler_cxx')

def build(bld):
    bld.program(source='main.cpp', target='app')

Créer et exécuter des résultats


$ ./waf configure build
Setting top to                           : /home/user/work/test
Setting out to                           : /home/user/work/test/build
Checking for 'g++' (C++ compiler)        : /usr/bin/g++
'configure' finished successfully (0.051s)
Waf: Entering directory `/home/user/work/test/build'
Waf: Leaving directory `/home/user/work/test/build'
'build' finished successfully (0.003s)
$ ./build/app
hoge

Pour d'autres détails (inclure, construire une bibliothèque partagée, etc.), veuillez vous référer au document d'origine. The Waf Book

TODO: Ajoutez si vous avez le temps

Prise en charge de l'environnement cross-build

Il semble que la construction croisée puisse être prise en charge en modifiant la variable d'environnement.

The Waf Book Re: [waf-users 4515] Compilation croisée de QNX à l'aide de qcc --Google Groups

référence

Waf: the meta build system Introduction de waf --Mackey's Lab

Ce qui suit est du matériel japonais, mais veuillez noter que le contenu est obsolète (article de 2010 et 2011) The Waf Book notes diverses sur le type de fonction pure du didacticiel waf

Recommended Posts

[Linux] [C / C ++] Remarques sur le système de construction Waf
À propos de Linux
À propos de Linux
À propos de Linux
À propos de Linux
[Linux] À propos de l'exportation
Linux C / C ++ Créez votre propre environnement de création de bibliothèque
Remarques sur avec
Notes d'étude Linux
notes de python C ++
[Linux] À propos de PATH
Construire la base de données Oracle 19c sur Oracle Linux 8.3 (deuxième partie de la construction de la base de données)
Linux (à propos des groupes)
Notes sur Pytorch
Construisez de manière compacte une base de données Oracle (19c) sous Linux sur VirtualBox
Linux (à propos du chemin du répertoire)
[Linux] [Paramètres initiaux] Paramètres système
À propos des paramètres du noyau Linux
Connaissances de base sur Linux
Architecture du système Linux [niveau d'exécution]
Notes d'installation d'Arch Linux
Mémo réseau (principalement Linux)