wafでHello Worldまでやってみる


wscriptが下記

def options(ctx):
    ctx.load('gcc')

def configure(cnf):
    cnf.load('gcc')
    cnf.check(header_name='stdio.h', features='c cprogram')


def build(bld):
    bld(features='c cprogram', source='main.c')

main.cプログラムが下記

#include <stdio.h>

int main(){
    printf("Hello, world!\n");
    return 0;
}
  • waf buildしたらエラーがでた
$ python waf-2.0.18 build
Waf: Entering directory `programming/waf/build'
[1/2] Compiling main.c
[2/2] Linking build
ld: can't open output file for writing: /programming/waf/build, errno=21 for architecture x86_64
collect2: error: ld returned 1 exit status

Waf: Leaving directory `/programming/waf/build'
Build failed
 -> task in '' failed with exit status 1 (run with -v to display more information)


  • ファイルをみたら、.oファイルまではできてるのでリンクができてない?と考えられる
$ tree
.
├── build
│   ├── bar.md
│   ├── bar.txt
│   ├── c4che
│   │   ├── _cache.py
│   │   └── build.config.py
│   ├── config.log
│   ├── foo.md
│   ├── foo.txt
│   └── main.c.1.o
├── main.c
├── src
├── waf-2.0.18
└── wscript
  • ので、wscriptにtargetを追加してやった
def options(ctx):
    ctx.load('gcc')

def configure(cnf):
    cnf.load('gcc')
    cnf.check(header_name='stdio.h', features='c cprogram')


def build(bld):
    bld(features='c cprogram', source='main.c', target='app')
  • これでlinkがちゃんとできて、buildが通った!


$ python waf-2.0.18 build
Waf: Entering directory `/programming/waf/build'
[2/2] Linking build/app
Waf: Leaving directory `/programming/waf/build'
'build' finished successfully (0.313s)


$ ./build/app
Hello, world!
  • buildディレクトリに出力されたapp実行ファイルを実行してやって, Hello, world! と表示されたら成功