wafでHello Worldまでやってみる
- wafのtutorialやってる
- Waf tutorial — Waf 2.0.18 documentation
- Hello World出力までやってみる
- チュートリアルの途中までやってるので、fooとかbarとかファイルができているが本記事では作成方法などは省略
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! と表示されたら成功