cmake と scons と waf と gyp の話
@repeatedly さんが scons はオワコンだとさかんにいってる今日この頃ですが、まあぼくはそこまでだとはおもっていません。開発 ML はそれなりに流量がありますし、http://two.pairlist.net/pipermail/scons-dev/ bitbucket のレポジトリにもそれなりにコミットされています https://bitbucket.org/scons/scons。
とはいえ、scons には致命的な問題があって、それはとてつもなく遅いということです。
小規模な C 言語ならあまり気にならないのですが、C++ で開発している場合、非常におそくてやってられません。ヘッダの依存解析が非常に遅いのかなー、とか考えてしまいますね。
実際、おなじコードを cmake と scons でコンパイルすると cmake の方が倍ぐらいはやいです。
tokuhirom@www4071uf:~/dev/tora/ext/Curl$ time /bin/sh -c 'scons -c && scons test' scons: Reading SConscript files ... scons: done reading SConscript files. scons: Cleaning targets ... Removed curl.os Removed lib/Curl.so scons: done cleaning targets. scons: Reading SConscript files ... scons: done reading SConscript files. scons: Building targets ... g++ -o curl.os -c -std=c++0x -Wall -Wno-sign-compare -fstack-protector -g -fPIC -DNDEBUG -O2 -fPIC -I/home/tokuhirom/dev/tora/vendor/boost_1_49_0 -I/home/tokuhirom/dev/tora/vendor/re2 -I/home/tokuhirom/dev/tora/tora -I/usr/include curl.cc g++ -o lib/Curl.so -Wl,-Bsymbolic -rdynamic -shared curl.os -L/home/tokuhirom/dev/tora -ltora -lre2 -lpthread -licui18n -licuuc -licudata -ldl -lm -lcurl ../../bin/tora -I lib -I ../../lib/ t/curl.tra ok 1 - undef 1..1 scons: done building targets. real 0m9.965s user 0m8.621s sys 0m1.076s tokuhirom@www4071uf:~/dev/tora/ext/Curl$ time /bin/sh -c 'make clean; cmake . && make && make test && make clean' -- Configuring done -- Generating done -- Build files have been written to: /home/tokuhirom/dev/tora/ext/Curl [100%] Building CXX object CMakeFiles/curl.dir/curl.o Linking CXX shared library libcurl.so [100%] Built target curl [100%] Built target curl t/curl.tra .. ok All tests successful. Files=1, Tests=1, 1 wallclock secs ( 0.05 usr 0.01 sys + 0.01 cusr 0.00 csys = 0.07 CPU) Result: PASS [100%] Built target test real 0m4.035s user 0m3.352s sys 0m0.476s
SConstruct の場合、python で簡単にロジックを書けるというメリットはあるのですが、規模がおおきくなるとつんでしまうので、だめだめです。
waf はチュートリアルよんでもよくわかんなかったのでやめました。gyp もなんかむずかしいのでやめました。結局 CMake でいこうかとおもいます。
【追記】
SConsの最適化は昔ここを参考にしたなぁ(ただし、それでもCMakeよりは遅い) -> scons.org/wiki/GoFastBut… / “cmake と scons と waf と gyp の話 - tokuhirom's blog.” htn.to/qtqwSM
— bokko (@cubicdaiya) July 11, 2012
だそうです。
【追記】
SCons はそもそも始まってすらいなかったようです。
https://plus.google.com/102550604876259086885/posts/AnEoGQexUcG
http://shinh.skr.jp/m/?date=20120712#p01