Unix

Meson 예제

ForceCore 2017. 7. 21. 11:00

Bazel 같은거 매우 힘들다. 일단 시스템 자체가 너무 커서 -_-;; 접근하고 싶지 않다. 문법도 뭔가 거부감이 드는 것 같다?


meson.build를 만든다.


project('libplacer', 'cpp')


cpp = meson.get_compiler('cpp')

root = meson.source_root()


zlib = cpp.find_library('z')


eastl_inc = include_directories('../EASTL/include',

    '../EASTL/test/packages/EABase/include/Common')

eastl_lib = cpp.find_library('EASTL', dirs : root + '/../bld.eastl')


zipper_lib = cpp.find_library('Zipper-static', dirs : root + '/../zipper/bld')

zipper_inc = include_directories('../zipper/zipper')


placer = static_library('placer',

    ['eastl_new.cpp', 'graph.cpp', 'ucla_reader.cpp'],

    include_directories : [eastl_inc, zipper_inc],

    dependencies : [eastl_lib, zipper_lib, zlib])


executable('a.out', 'test.cpp',

    link_with : placer,

    include_directories : [eastl_inc, zipper_inc],

    dependencies : [eastl_lib, zipper_lib, zlib])


바로 이전 글인 WAF 예제와 같은 작업을 하는 녀석이다.


alL: builddir do_build


builddir:

    meson builddir


do_build:

    cd builddir && ninja


clean:

    rm -rf builddir


distclean:

    rm -rf builddir



$ meson builddir
$ cd builddir
$ ninja

하면 컴파일이 된다. 참고로 ninja는 사람이 보기엔 고통스럽지만 기계가 작업하기 편하게 특화된 빌드 시스템이다. meson을 비롯해서 다른 build system이 ninja와 사람 사이의 interface로 작용해서 사람이 고통스럽지 않으면서도 기계가 작업하기에도 편리한 중개자로 활약하고 있다.

Meson이 문법이 약간 파이썬 같으면서도 (똑같진 않음) type strong language (?) 라서 작업할 때 실수가 없는 것이 장점이다. 일단은 맘에 든다. CMakeLists.txt 를 작성할 때에는 한나절 걸려도 제대로 못했는데 이거는 몇시간만에 해냈다. 그리고 현대적인 "reproducible build" http://mesonbuild.com/Reproducible-builds.html 에 중점을 두어서 컴파일 환경에 따라 오락가락 하는 것도 없어서 좋을 것이다.