[Linux] [C / C ++] Hinweise zum Waf-Build-System

Hinweis

Dieses Dokument wird durch "waf-1.9.3" bestätigt. Bitte überprüfen Sie dies mit Originaldokumenten, da sich möglicherweise Änderungen ergeben.

Überblick

Zusammenfassung über Waf, ein Build-Tool von Python

Waf definiert eine Datei namens "wscript" und erstellt sie.

Da die japanischen Materialien solide sind, sollten Sie sich grundsätzlich auf die folgenden Seiten beziehen. (Da es von Freiwilligen übersetzt wird, ist es nicht die neueste? * Bestätigung erforderlich) The Waf Book

Die englischen Originalmaterialien lauten wie folgt. The Waf Book

Verdienst und Fehler

verdienen

Fehler

Vorbereitung

Laden Sie Waf herunter

Laden Sie die Quelle von Official Site oder Github herunter.

Laden Sie die Ausführungsbinärdatei direkt herunter


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

Aus der Quelle erstellen


$ 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

Überprüfen Sie die Probe vorerst

Wenn Sie aus dem Quellcode erstellt haben, befindet sich im Repository eine Demo. Es gibt Beispiele in verschiedenen Sprachen, auf die Sie verweisen können.

C-Sprachbeispiel-Build-Test


$ 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)

wscript Implementierungsverfahren

wscript Grundlagen

waf definiert die Funktion in wscript als * waf Befehl *. Als Beispiel wird der waf-Befehl "Hallo" unten definiert.

Stichprobe


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

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

Führen Sie den Befehl waf hallo aus


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

Sie können feststellen, dass der Befehl ausgeführt wird, indem Sie "Hallo" als Ausführungsbefehl für "Waf" angeben.

Erstellen Sie ein C ++ - Projekt

Siehe unten im Originaldokument The Waf Book

main.cpp


#include <iostream>

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

C++Erstellen Sie das Projekt


#! /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')

Ergebnisse erstellen und ausführen


$ ./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

Weitere Informationen (einschließlich, Erstellen einer gemeinsam genutzten Bibliothek usw.) finden Sie im Originaldokument. The Waf Book

TODO: Fügen Sie hinzu, wenn Sie Zeit haben

Unterstützung für Cross-Build-Umgebungen

Es scheint, dass Cross-Build durch Ändern der Umgebungsvariablen unterstützt werden kann.

The Waf Book Re: [waf-users 4515] Cross-Kompilieren von QNX mit qcc --Google Groups

Referenz

Waf: the meta build system Einführung von waf - Mackey's Lab

Das Folgende ist japanisches Material, aber bitte beachten Sie, dass der Inhalt veraltet ist (Artikel 2010 & 2011) The Waf Book waf tutorial-pure function type verschiedene Notizen

Recommended Posts

[Linux] [C / C ++] Hinweise zum Waf-Build-System
Über Linux
Über Linux
Über Linux
Über Linux
[Linux] Über den Export
Linux C / C ++ Erstellen Sie Ihre eigene Bibliothekserstellungsumgebung
Anmerkungen zu mit
Linux-Studiennotizen
Python C ++ Notizen
[Linux] Über PATH
Erstellen Sie Oracle Database 19c unter Oracle Linux 8.3 (zweiter Teil der DB-Konstruktion)
Linux (über Gruppen)
Hinweise zu Pytorch
Erstellen Sie kompakt eine Oracle-Datenbank (19c) unter Linux auf VirtualBox
Linux (über Verzeichnispfad)
[Linux] [Grundeinstellungen] Systemeinstellungen
Informationen zu Linux-Kernelparametern
Grundkenntnisse über Linux
Linux-Systemarchitektur [Run Level]
Installationshinweise für Arch Linux
Netzwerk-Memo (hauptsächlich Linux)