Ce document est confirmé par «waf-1.9.3». Veuillez vérifier avec Documents originaux car il peut y avoir des changements.
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
Démérite
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
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)
wscriptwaf 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».
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
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
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