CMakeLists.txt 는 매우 고통스럽다. 뭐랄까... autotools의 약점을 보완하기 위해 나온 것이나 자체적인 스크립트 언어가 매우 개떡인 고로 되니까 쓰는거지 즐겨쓰지 않는다는 듯. 나도 별로 쓰기 싫다.
WAF는 스크립트가 파이썬이란 장점이 있어서 C++ 프로젝트가 아닌 것으로 이상한 짓 하려면 추천한다. 물론 인기는 없다...;; 구글에서 Bazel도 내놓고 어디선 뭐 내놓고 난리를 치고 있는데 딱히 앞으로도 인기가 있어질 것 같지는 않다. 사용 설명서가 좀 개떡같다는 평인 듯 하다. 그래도 난 맘에 들긴 했다. 하지만 다른 게 더 맘에 드는 고로 일단은 패스.
#!/usr/bin/python3
import os
APPNAME = 'libplacer'
VERSION = '001'
top = '.'
# Special variable. Dir to hold outputs.
out = 'bld'
def options(opt):
opt.load('compiler_cxx')
def configure(cnf):
print('configuring project in ' + cnf.path.abspath())
cnf.load('compiler_cxx')
cnf.check_cxx(cxxflags='-O2 -g -Wall -std=c++14')
cnf.check_cxx(lib='z')
cnf.env.append_unique('CXXFLAGS', ['-g', '-O2', '-Wall', '-std=c++14'])
def build(bld):
zipper_path = os.path.join(bld.path.abspath(), '../zipper/bld')
eastl_path = os.path.join(bld.path.abspath(), '../bld.eastl')
eastl_include_path = os.path.join(bld.path.abspath(), '../EASTL/include')
eabase_path = os.path.join(bld.path.abspath(), '../EASTL/test/packages/EABase/include/Com
mon')
bld.stlib(
includes=[eastl_include_path, eabase_path],
target='graph',
source='eastl_new.cpp graph.cpp ucla_reader.cpp')
# For all available properties,
# look at the WAF book, Table 1: Use variables and task generator attributes for C/C++
bld.program(
source=['test.cpp'],
target='test',
use=['graph'],
includes=[eastl_include_path, eabase_path],
stlibpath=[zipper_path, eastl_path],
stlib=['Zipper-static', 'EASTL'],
lib=['z'])
컴파일 하는 법:
waf configure (한번만)
waf
하면 컴파일 됨.
out= 에 지정한 폴더가 생기면서 거기에 컴파일 결과물이 생길 것이다.
그런데 뭐가 맘에 안드는고 하니. gcc에 너무 특화되어서 내가 플래그를 다 설정해주고 있다는 점. clang이라든지 아니면 다른 운영체제용 빌드를 한다든지 한다면 고생길이 훤해보인다. 그래서 일단은 소규모 혼자 가지고 놀기 위한 것이 아니라면 일단은 피하고 싶다. 아니면 아예 리눅스에서 할 것이 뻔한 LaTeX 라면 또 괜찮은 것 같은데 그건 waf를 굳이 써야 하나... Makefile이면 되지.