tokuhirom's Blog

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 はそもそも始まってすらいなかったようです。
https://plus.google.com/102550604876259086885/posts/AnEoGQexUcG
http://shinh.skr.jp/m/?date=20120712#p01