锘??xml version="1.0" encoding="utf-8" standalone="yes"?> An experimental
profile mode has been added. This is an implementation of
many C++ standard library constructs with an additional analysis
layer that gives performance improvement advice based on
recognition of suboptimal usage patterns. For example,
When instrumented via the profile mode, can return suggestions about
the initial size and choice of the container used as follows:
These constructs can be substituted for the normal libstdc++
constructs on a piecemeal basis, or all existing components can be
transformed via the 鎬葷畻灝?a >OmniCppComplete涓婚〉涓婄殑鏁堟灉緇欏紕浜嗗嚭鏉ワ紙榪欓噷錛夈?/p> 鏍規嵁鍏秇elp鎻愮ず涓姝ヤ竴姝ユ潵(瑁呭畬浜唎mnicppcomplete涔嬪悗錛屽彲浠?help omnicppcomplete)錛?/p> 榪欓噷鐨勮嚜鍔ㄥ姞杞藉凡鏈塿im鐨勫姛鑳斤紝灝辯敤涓涓獀im鑴氭鏉ュ疄鐜?(鍙傝?vim :help glob緇欑殑渚嬪瓙)錛?/p> 浠ュ悗闇瑕佹柊鐨則aglist錛屽彧闇瑕佹斁鍦▇/.vim/tagfiles鐩綍涓嬪氨濂戒簡銆?/p>
vim鍚姩鐨勬椂鍊欙紝浼氳嚜鍔ㄦ墽琛寏/.vimrc錛屼粠鑰岃皟鐢╩y.vim錛屽皢浜嬪厛鍑嗗濂界殑taglist鏇存柊榪涘幓錛涜繖閲屼竴鑸斁涓浜涗笉澶彉鍖栫殑闈欐佸ご鏂囦歡tag灝卞彲浠ヤ簡銆?/p> 鏍規嵁涓婁竴姝ョ殑鎯緥錛岄渶瑕佺敓鎴愪竴涓猼ags鏂囦歡錛屾斁鍦▇/.vim/tagfiles/鐨勬煇涓瓙鐩綍涓嬶細 榪欓噷闇瑕佸皢ver鎹㈡垚褰撳墠緋葷粺鐨刲ibstdc++鐗堟湰錛孶buntu 9.10涓婄殑鏄?.4.1.
鍐欎竴涓畝鍗曠殑c++紼嬪簭錛屽湪Insert Mode涓嬶紝Ctrl+X錛?Ctrl+P錛屽彂鐜板茍涓嶈兘宸ヤ綔錛屼粈涔堟彁紺轟篃娌℃湁錛涘垵姝ユ鐤戞槸瀵瑰簲鐨則ag鏂囦歡涓嶅銆?/p>
騫稿ソ鏃╂湁浜哄皾璇曡繃浜嗭紝緇欏嚭浜嗕竴縐嶅姙娉?榪樻槸榪欓噷錛夛紝鍙儨浠栫殑鏂規硶鎴戣瘯浜嗕笉琛岋紝涓嶈繃宸茬粡鍙互鍊熺敤浠栫殑鎬濊礬浜嗭細 -rw-r--r-- 1 skyscribe skyscribe 4.2M 2010-01-10 18:21 tags cp tags ~/.vim/tagfiles/gcc4.4/ 涓婅竟鐨剅eview紿楀彛鏄劇ず褰撳墠璋冪敤鐨勫嚱鏁頒俊鎭?杈撳叆./->/:: 鐨勬椂鍊欎細鑷姩鎻愮ず錛屼篃鍙互鐢–TRL+X CTRL+O 鏉ヨ皟鍑烘彁紺虹獥鍙o紝鏂瑰悜閿垯鍙互閫夋嫨銆?/p>
鎰熷叴瓚g殑璇風Щ姝?
http://skyscribe.github.com
]]>
7縐嶇粨鏋?/h2>
yield
yield
yield
end
x=1
thrice {x+=2}
thrice(&block)
thrice(&block)
end
x = 4
six_times { x += 10 }
@saved = b # Note: no ampersand! This turns a block into a closure of sorts.
end
save_for_later { puts "Hello!" }
puts "Deferred execution of a block:"
@saved.call
@saved.call
榪欓噷鐨剆aved淇濆瓨涓簃ain瀵硅薄鐨勪竴涓垚鍛橈紝鍚庤竟瀹炵幇寤惰繜璋冪敤銆?br />
@saved_proc = proc { puts "I'm declared with proc." }
@saved_proc_new.call
@saved_proc.call
@saved_lambda.call
puts "I'm declared as a method."
end
@method_as_closure = method(:some_method)
鐗圭偣鍜屽樊寮?/h2>
return琛屼負
褰撳搴旂殑block閲岃竟鍖呭惈return鐨勬椂鍊欙紝涓婅堪7涓柟寮忔湁浜涜鐨勪笉鍚岋細
arity - 鍙傛暟涓暟鏍¢獙
瀵逛簬璋冪敤鐐圭殑鍙傛暟媯鏌ワ紝鍛堢幇濡備笅琛屼負錛?br />
鎬葷粨
lambda/method鏂瑰紡鍛堢幇瀹屽鐨刢losure琛屼負錛宺eturn涔嬪悗緇х畫涓嬩竴嫻佺▼錛屽浜庡疄闄呬紶鍏ュ弬鏁頒釜鏁頒細鍦ㄨ皟鐢ㄧ偣媯鏌ワ紱proc/blocks鏂瑰紡鍦╮eturn鐨勬椂鍊欑洿鎺ヨ繑鍥炰簡澶栭儴鐨勫嚱鏁版垨鑰卋lock錛屽浜庝紶鍏ョ殑鍙傛暟涓暟涔熸病鏈夋墽琛屾鏌ャ?br />
鍙傝冿細http://innig.net/software/ruby/closures-in-ruby
浠ヤ笂緇撹楠岃瘉浜庢渶鏂扮殑ruby1.9.3錛屽拰閾炬帴涓殑緇撹鏈変簺璁鎬笉鍚岋紱ruby1.8涓殑proc鍑芥暟鍙兘鏈変笉鍚岀殑琛屼負銆?br />
]]>
絎竴涓兂鍒扮殑鏄痑pt-get鏉ヤ笅杞戒簡錛屽緱鍒扮殑鏄竴涓氦浜掑紡瑙f瀽鍣ㄥ拰緙栬瘧鍣ㄣ傚拰python鐨勬瘮杈冪被浼鹼紝涓嶈繃ruby鐨勪氦浜掔▼搴忔槸涓崟鐙殑紼嬪簭鍙仛irb銆?br />
鍙儨寰楀埌鐨勪笉鏄瘮杈冩柊鐨勭増鏈?br />
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]
skyscribe:~$ irb
irb(main):001:0> puts "hello"
hello
=> nil
涓?
榪囧緢蹇兂璧風炕緲?a >
wiki錛岃繕鏄敤rvm鏂逛究鐨勫銆傛暀紼嬫瘮杈冪畝鍗曪紝鍙傝冨畠鐨?a >quick installation guide灝卞彲銆傜涓嬈″皾璇曠殑鏃跺欑敤apt-get瀹夎浜嗘病鏈塸urge錛屽鑷存繪槸瀹夎鍒皉oot鐢ㄦ埛閫?
鎴?#8220;permission denied"鐨勯棶棰樸?br />
瀹夎濂戒箣鍚庯紝鎵鏈夌殑涓滆タ閮藉湪$HOME/.rvm涓嬭竟錛屾瘮杈冨共鑴嗐?br />
skyscribe:~$ rvm install 1.9.3
skyscribe:~$ rvm list
rvm rubies
ruby-1.9.3-p125 [ i686 ]
# Default ruby not set. Try 'rvm alias create default <ruby>'.
# => - current
# =* - current && default
# * - default
skyscribe:~$ rvm alias create default ruby-1.9.3-p125
Creating alias default for ruby-1.9.3-p125.
Recording alias default for ruby-1.9.3-p125.
Creating default links/files
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session.
^C
skyscribe:~$ bash
skyscribe:~$ rvm use 1.9.3
Using /home/skyscribe/.rvm/gems/ruby-1.9.3-p125
skyscribe:~$ ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]
瀹樻柟鐨勬枃妗f槸鏈濂界殑鍙傝冿紝鎺ㄨ崘ruby koans,涓嬭澆涓嬫潵錛岃В鍘嬪悗錛屾槸涓吀鍨嬬殑TDD瀛︿範鏉愭枡錛屼笉鏂繍琛?br />
]]>
浣滀負涓闂ㄥ井鍨嬩笖瀹屾暣鐨勭紪紼嬭璦錛宎wk鍙互鐢ㄦ暟琛屼唬鐮佸氨瀹屾垚鍏朵粬璇█闇瑕佹暟鍊嶇殑LOC鎵嶈兘瀹屾垚鐨勫伐浣溿傚叾璁捐鍝插涔熸槸姣旇緝鐗規畩鐨勶紝鏍稿績鏄痙ata錛峝riven鐨勶紝騫朵笖閲囩敤浜嗗拰C綾諱技鐨勮娉曟潵緇勭粐銆傚畠鏈鏍稿績鐨勬濇兂搴旇鏄涓嬩袱鐐癸細
寮曞彂鎴戣姳鐐規椂闂存潵浠旂粏鐮旂┒awk鐨勮搗鍥犳槸榪欐牱鐨勶紝鎴戜滑鐨勭▼搴忓湪鍋歱rofiling鐨勬椂鍊欙紝鍙戠幇鍘熸潵鐢╯hell鍐欑殑鑴氭湰鍒嗘瀽涓嬈¤瘽璐圭殑鏃墮棿澶暱銆傚垵鐪嬩簡涓嬮偅涓剼鏈紝澶ф鐨勯昏緫鏄鎵悕鎵鏈夌殑log鏂囦歡錛屾寜鐓ф椂闂存埑灝嗗叧娉ㄧ殑鏃墮棿鎵鑰楄垂鐨勬椂闂存彁鍙栧嚭鏉ワ紝璁$畻騫沖潎鍊鹼紝娉㈠姩絳夋渶緇堢敾鍑烘洸綰垮浘銆?br>
鏁翠綋鐨勮剼鏈湁鍑犱釜閮ㄥ垎錛坧ython錛媌ash錛夛紝澶勭悊涓嬈?0MB鐨刲og鏂囦歡闇瑕佽楄垂40鍒嗛挓锝?涓皬鏃訛紝榪欐樉鐒惰秴鍑轟簡棰勬湡錛涗腑闂翠竴涓鐞嗗緢闀跨殑閮ㄥ垎鏄痝rep鏌愪釜鏃墮棿孌電殑淇℃伅鐒跺悗鎸夌収鎶ヨ〃鏍煎紡鍐欏叆鍒頒腑闂存枃浠朵腑銆傚湪鎯寵兘鍚︿紭鍖栬繖涓鑺傜殑鏃跺欙紝蹇界劧灝辨兂璧蜂簡妯″紡鍖歸厤鏉ワ紙瀛︿範Haskell鐨勬渶娣卞嵃璞★級錛屼簬鏄ぇ鑷寸炕浜嗕竴涓媋wk錛屽彂鐜板緢瀹規槗閫氳繃妯″紡鍖歸厤浣垮緱鎸夎澶勭悊錛屽悓鏃惰褰曚腑闂寸殑淇℃伅錛岃屼竴涓椂闂存鎭板ソ鍜宎wk鐨剅ecord姒傚康鍚誨悎銆?br>
鑺變簡2涓皬鏃剁爺璇諱簡涓媋wk鐨勫嚱鏁拌娉曪紝鑷畾涔夎嚜宸辯殑鏃墮棿鎴彇鍑芥暟錛坓awk鐨剆trftime寰堟湁鐢紝灝ゅ叾鎴戜滑鍙戠幇璁板綍鏈夎煩璺冭鑷姩琛ュ叏涓棿鐨勬暟鎹褰曟椂錛夛紝閫氳繃涓変釜pattern鎴彇闇瑕佺殑淇℃伅錛?0鍒嗛挓鍐欏嚭鏉wk鐨勪唬鐮佹潵銆?br>
鎵騫哥殑鏄紝鍏跺畠鐨剆hell鑴氭湰閮戒笉闇瑕佷換浣曟敼鍔紝閲嶆柊璺戜竴嬈★紝3s灝卞鐞嗗畬浜嗗師鏉?0MB鐨勬枃浠訛紝鐪嬫潵榪欑偣鏃墮棿鎶曞叆榪樻槸鐩稿綋鍊煎緱鐨勩?br>
鏈夊叴瓚g殑鍙弬鑰冿細
http://www.gnu.org/manual/gawk/gawk.html
PS錛歛wk鐨勫彟涓浣滆?a >Winberger 渚涜亴浜巊oogle銆?br>
]]>
榪樺鍔犱簡涓涓柊鐨刾rofile妯″紡錛堝皻澶勪簬璇曢獙闃舵錛夛紝鍙互鏍規嵁紼嬪簭榪愯鐘舵佺粰鍑哄叧浜嶴TL浣跨敤鐨勪竴浜涗紭鍖栧緩璁?br>
鍙傜湅濡備笅鐨勬弿榪幫細
#include <vector>
int main()
{
std::vector<int> v;
for (int k = 0; k < 1024; ++k)
v.insert(v.begin(), k);
}vector-to-list: improvement = 5: call stack = 0x804842c ...
: advice = change std::vector to std::list
vector-size: improvement = 3: call stack = 0x804842c ...
: advice = change initial container size from 0 to 1024-D_GLIBCXX_PROFILE macro.
Profile mode鐨勬彁鍑烘簮浜?9騫碈GO鐨勪竴綃?a >paper錛屼綔鑰呴噷杈瑰嚭鐜頒簡鍗庝漢鐨勫悕瀛楋紙鏍規嵁鎷奸煶鏉ュ垽鏂級;浣滆呭湴鍧濉殑鏄劇劧鏄疨urdue澶у鐨勶細
Dept. of Comput. Sci., Purdue Univ., West銆?br>
GCC鐨凱rofiler瀵笴++鐨勬敮鎸佷竴璐仠鐣欏湪鍜孋鍚屾牱鐨勬按騫籌紱鐢變簬C++妯℃澘鏈哄埗鍜孫O鐨勫瓨鍦ㄤ嬌寰楀緢澶氭椂鍊欏垎鏋恜rofiling緇撴灉鐨勬剰涔夎澶уぇ鍓婂急銆?br>榪欎釜閽堝STL鐨刾rofile mode榪樻槸寰堝煎緱鏈熷緟鐨勩?br>
]]>
鏈榪戞墠鍙戠幇boost鐨刢make鐗堟湰宸茬粡鐙珛鍑烘潵浜嗭紝瀵逛簬浣跨敤cmake鐨勭敤鎴瘋岃█錛岃繖閲屾槸涓笉閿欑殑閫夋嫨銆?br>欏圭洰涓婚〉鐨勬枃妗e緢鏄竻鏅幫紝鏈鏂扮殑鐗堟湰鏄?.41 (鐗堟湰鍙峰搴旂殑鍩烘湰灝辨槸鍏秛pstream鐨刡oost鐗堟湰鍙?銆?br>婧愪唬鐮佹槸鐢╣it緇勭粐鐨勶紝瀵逛簬Linux鐢ㄦ埛鑰岃█鏇村姞鏂逛究銆?br>
寮曠敤鍏朵富欏典笂鐨勪竴鍙ヨ瘽錛?br>
CMake + GIT +Spinx 紜疄澶熼叿浜嗐?br>
緙栬瘧璧鋒潵鍙互鍏呭垎鍒╃敤寮哄ぇ鐨凜Make浜嗭細
git clone git://gitorious.org/boost/cmake.git src
cd src
git checkout <TAG> //TAG==1.41.0.cmake0
mkdir bld
cd bld/
cmake ../濡傛灉闇瑕佹寜闇緙栬瘧鏌愪簺搴擄紝鍙渶鐢╩ake edit_cache淇敼cache鍗沖彲銆?br>
]]>
棣栧厛闇瑕佹湁ctags錛屽茍涓斿繀欏繪槸Exuberant ctags錛屾垜鐨刄buntu涓婂凡緇忔槸鏈鏂扮増浜嗭細
skyscribe@skyscribe:~/study/vim/pics$ ctags --version
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Aug 6 2009, 17:06:22
Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
Optional compiled features: +wildcards, +regex
鍦?~/.vimrc 閲岃竟鍔犲叆autoload taglist鍔熻兘錛屼負浜嗘柟渚胯嚜鍔ㄦ洿鏂板綋鍓峵ags錛岃緗竴涓揩鎹烽敭錛?a >榪欓噷錛夛細
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
source ~/.vim/my.vim
cat ~/.vim/my.vim
let tagfiles = glob("`find ~/.vim/tagfiles -name tags -print`")
let &tags = substitute(tagfiles, "\n", ",", "g")
瑕佹湁STL鐨刬ntelliSense錛岃嚜鐒惰鏈塖TL C++鐨則ags database浜嗭紝榪欓噷闇瑕佺敓鎴愪箣銆?/h1>
mkdir -p ~/.vim/tagfiles/gcc<ver>/
ls 鈥搇 /usr/include/c++/
鐢ㄤ笂杈圭殑鍛戒護鐢熸垚瀵瑰簲鐨則ags鏂囦歡錛?/h1>
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . -o ~/.vim/tagfiles/gcc4.4/tags /usr/include/c++/4.4
mkdir gcc4.4
cp -R /usr/include/c++/4.4 ./
cat generate_sed.sh
#!/bin/bash
if [ $# -eq 0 ];then
dir=.
else
dir=$1
fi
#Substitute scripts
cat > .edit.sed <<- EOF
s/\b_GLIBCXX_BEGIN_NAMESPACE\b\s*\(\s*(\w+)\s*\)/namespace \1{/g
s/_GLIBCXX_BEGIN_NESTED_NAMESPACE\s*\(\s*std\s*,\s*_GLIBCXX_STD_[DP]\s*\)/namespace std{/g
s/\b_GLIBCXX_END_NAMESPACE\b/}/g
s/\b_GLIBCXX_END_(NESTED_\?NAMESPACE\b/}/g
EOF
count=0
cols=`tput cols`
cols=`echo "$cols - 8"|bc`
for file in `find $dir -type f`;do
if [ "T"$file != "T"$0 ];then
sed -nf ".edit.sed" $file
count=`echo "$count+1"|bc`
echo -ne "="
if [ `echo "$count%$cols"|bc` -eq 0 ];then
echo " $count"
fi
fi
done
echo "Processed $count files!"
rm -fr .edit.sed
# Generate ctag file
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
echo "generated tag file!"
skyscribe@skyscribe:~/libstdc++/gcc4.4$ ./generate_sed.sh .
==================================================================================================== 100
==================================================================================================== 200
==================================================================================================== 300
==================================================================================================== 400
==================================================================================================== 500
==================================================================================================== 600
===============================================================Processed 663 files!
generated tag file!
ls tags -lh
鍒拌繖閲屾晥鏋滅粓浜庡嚭鏉ヤ簡錛?/h1>
]]>
鍏跺疄鎴戝綋鍒濅篃鏈変笉灝戠枒鎯戯紝涓嶈繃閫氳繃杈冮暱鏃墮棿鐨勫疄璺靛拰闃呰manual錛屾葷畻鏈変簡涓浉瀵瑰緢娓呮櫚鐨勮璇嗐?/font>
cmake鐨勫府鍔╃粍緇囩殑榪樻槸寰堟湁瑙勫緥鐨勶紝浜嗚В浜嗗叾瑙勫緥錛屾壘鑷繁鎯寵鐨勪笢瑗垮氨浼氬緢綆鍗曪紝鎵浠ヤ釜浜鴻寰楄繖涓鐐瑰彲鑳芥槸鏈閲嶈鐨勩傚叾help緋葷粺澶ф鏄繖涔堝嚑綾伙細
榪欎釜鏄疄鐢ㄨ繃紼嬩腑鏈闀跨敤鍒扮殑錛岀浉褰撲簬涓鑸剼姝ヨ璦涓殑鍩烘湰璇硶錛屽寘鎷畾涔夊彉閲忥紝foreach錛宻tring錛宨f錛宐uiltin command閮藉湪榪欓噷銆?/font>
鍙互鐢ㄥ涓嬭繖浜涘懡浠よ幏鍙栧府鍔╋細
cmake --help-commands榪欎釜鍛戒護灝嗙粰鍑烘墍鏈塩make鍐呯疆鐨勫懡浠ょ殑璇︾粏甯姪錛屼竴鑸笉鐭ラ亾鑷繁瑕佹壘浠涔堟垨鑰呮兂闅忔満緲葷炕寰楁椂鍊欙紝鍙互鐢ㄨ繖涓?/p>
鎴戜竴鑸洿甯哥敤鐨勬柟娉曟槸灝嗗叾閲嶅畾鍚戝埌less閲岃竟錛岀劧鍚庡湪緙栬緫鍣ㄩ噷杈規悳绱㈠叧閿瓧銆?/p>
鍙﹀涔熷彲浠ョ敤濡備笅鐨勫姙娉曞眰灞傜緝灝忔悳绱㈣寖鍥達細
cmake --help-command-listcmake --help-command-list | grep find
skyscribe@skyscribe:~/program/ltesim/bld$ cmake --help-command-list | grep find
find_file
find_library
find_package
find_path
find_program
cmake --help-command find_library
cmake version 2.6-patch 4
------------------------------------------------------------------------------
SingleItemfind_library
Find a library.find_library(<VAR> name1 [path1 path2 ...])
This is the short-hand signature for the command that is sufficient in
many cases. It is the same as find_library(<VAR> name1 [PATHS path1
path2 ...])find_library(
<VAR>
name | NAMES name1 [name2 ...]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_CMAKE_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
鍜宑ommand鐨勫府鍔╂瘮杈冪被浼鹼紝鍙笉榪囪繖閲屽彲浠ユ煡鎵綾make鑷繁瀹氫箟浜嗛偅浜涘彉閲忎綘鍙互鐩存帴浣跨敤錛岃濡侽SName錛屾槸鍚︽槸Windows錛孶nix絳夈?/font>
鎴戞渶甯哥敤鐨勪竴涓緥瀛愶細
cmake --help-variable-list | grep CMAKE | grep HOSTCMAKE_HOST_APPLECMAKE_HOST_SYSTEMCMAKE_HOST_SYSTEM_NAMECMAKE_HOST_SYSTEM_PROCESSORCMAKE_HOST_SYSTEM_VERSIONCMAKE_HOST_UNIXCMAKE_HOST_WIN32榪欓噷鏌ユ壘鎵鏈塁Make鑷繁瀹氫箟鐨刡uiltin鍙橀噺錛涗竴鑸拰緋葷粺騫沖彴鐩稿叧銆?/p>
濡傛灉甯屾湜灝嗘墍鏈夌敓鎴愮殑鍙墽琛屾枃浠躲佸簱鏀懼湪鍚屼竴鐨勭洰褰曚笅錛屽彲浠ュ姝ゅ仛錛?/p>
榪欓噷鐨則arget_dir鏄竴涓疄鐜拌緗ソ鐨勭粷瀵硅礬寰勩傦紙CMake閲岃竟緇濆璺緞姣旂浉瀵硅礬寰勬洿灝戝嚭闂錛屽鏋滃彲鑳藉敖閲忕敤緇濆璺緞錛?/p>
# Targets directoryset(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${target_dir}/lib)set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${target_dir}/lib)set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${target_dir}/bin)
Property涓鑸緢灝戦渶瑕佺洿鎺ユ敼鍔紝闄ら潪浣犳兂淇敼涓浜涢粯璁ょ殑琛屼負錛岃濡備慨鏀圭敓鎴愮殑鍔ㄦ佸簱鏂囦歡鐨剆oname絳夈?/font>
璀闇瑕佸湪鍚屼竴涓洰褰曚笅鏃㈢敓鎴愬姩鎬佸簱錛屼篃鐢熸垚闈欐佸簱錛岄偅涔堥粯璁ょ殑鎯呭喌涓嬶紝cmake鏍規嵁浣犳彁渚涚殑target鍚嶅瓧鑷姩鐢熸垚綾諱技鐨刲ibtarget.so, libtarget.a錛屼絾鏄悓涓涓猵roject鍙兘鍚屾椂鏈変竴涓紝鍥犱負target蹇呴』鍞竴銆?/font>
榪欐椂鍊欙紝灝卞彲浠ラ氳繃淇敼taget瀵瑰簲鐨勬枃浠跺悕錛屼粠鑰岃揪鍒版棦鐢熸垚鍔ㄦ佸簱涔熶駭鐢熼潤鎬佸簱鐨勭洰鐨勩?/font>
璀錛?/font>
cmake --help-property-list | grep NAMEGENERATOR_FILE_NAMEIMPORTED_SONAMEIMPORTED_SONAME_<CONFIG>INSTALL_NAME_DIROUTPUT_NAMEVS_SCC_PROJECTNAMEskyscribe@skyscribe:~$ cmake --help-property OUTPUT_NAMEcmake version 2.6-patch 4------------------------------------------------------------------------------SingleItemOUTPUT_NAMESets the real name of a target when it is built.Sets the real name of a target when it is built and can be used tohelp create two targets of the same name even though CMake requiresunique logical target names. There is also a <CONFIG>_OUTPUT_NAMEthat can set the output name on a per-configuration basis.
鐢ㄤ簬鏌ユ壘甯哥敤鐨勬ā鍧楋紝璀boost錛宐zip2, python絳夈傞氳繃綆鍗曠殑include鍛戒護鍖呭惈棰勫畾涔夌殑妯″潡錛屽氨鍙互寰楀埌涓浜涙ā鍧楁墽琛屽悗瀹氫箟濂界殑鍙橀噺錛岄潪甯告柟渚褲?/font>
璀甯哥敤鐨刡oost搴擄紝鍙互閫氳繃濡備笅鏂瑰紡錛?/font>
# Find boost 1.40INCLUDE(FindBoost)find_package(Boost 1.40.0 COMPONENTS thread unit_test_framework)if(NOT Boost_FOUND)message(STATUS "BOOST not found, test will not succeed!")endif()涓鑸紑澶撮儴鍒嗙殑瑙i噴閮界浉褰撴湁鐢紝鍙弧瓚?0%闇姹傦細cmake --help-module FindBoost | head -40cmake version 2.6-patch 4------------------------------------------------------------------------------SingleItemFindBoostTry to find Boost include dirs and librariesUsage of this module as follows:== Using Header-Only libraries from within Boost: ==find_package( Boost 1.36.0 )if(Boost_FOUND)include_directories(${Boost_INCLUDE_DIRS})add_executable(foo foo.cc)endif()== Using actual libraries from within Boost: ==set(Boost_USE_STATIC_LIBS ON)set(Boost_USE_MULTITHREADED ON)find_package( Boost 1.36.0 COMPONENTS date_time filesystem system ... )if(Boost_FOUND)include_directories(${Boost_INCLUDE_DIRS})add_executable(foo foo.cc)target_link_libraries(foo ${Boost_LIBRARIES})endif()The components list needs to contain actual names of boost libraries
CMake鐩告瘮杈冧簬autotools鐨勪竴涓紭鍔垮氨鍦ㄤ簬鍏剁敓鎴愮殑涓棿鏂囦歡緇勭粐鐨勫緢鏈夊簭錛屽茍涓旀竻鏅版槗鎳傦紝涓嶅儚autotools浼氱敓鎴愬ぉ涔︿竴鏍風殑搴炵劧澶х墿錛?0000+鐨勪笉椴滆錛夈?/p>
涓鑸珻Make瀵瑰簲鐨凪akefile閮芥槸鏈夊眰綰х粨鏋勭殑錛屽茍涓斾細鏍規嵁浣犵殑CMakeLists.txt闂寸殑鐩稿緇撴瀯鍦╞inary directory閲岃竟鐢熸垚鐩稿簲鐨勭洰褰曠粨鏋勩?/p>
璀瀵逛簬鏌愪竴涓猼arget錛屼竴鑸琤inary tree涓嬪彲浠ユ壘鍒頒竴涓枃浠跺す: CMakeFiles/<targentName>.dir/,姣斿錛?/p>
skyscribe@skyscribe:~/program/ltesim/bld/dev/simcluster/CMakeFiles/SIMCLUSTER.dir$ ls -ltotal 84-rw-r--r-- 1 skyscribe skyscribe 52533 2009-12-12 12:20 build.make-rw-r--r-- 1 skyscribe skyscribe 1190 2009-12-12 12:20 cmake_clean.cmake-rw-r--r-- 1 skyscribe skyscribe 4519 2009-12-12 12:20 DependInfo.cmake-rw-r--r-- 1 skyscribe skyscribe 94 2009-12-12 12:20 depend.make-rw-r--r-- 1 skyscribe skyscribe 573 2009-12-12 12:20 flags.make-rw-r--r-- 1 skyscribe skyscribe 1310 2009-12-12 12:20 link.txt-rw-r--r-- 1 skyscribe skyscribe 406 2009-12-12 12:20 progress.makedrwxr-xr-x 2 skyscribe skyscribe 4096 2009-12-12 12:20 src榪欓噷錛屾瘡涓涓枃浠墮兘鏄釜寰堢煭灝忕殑鏂囨湰鏂囦歡錛屽唴瀹圭浉褰撴竻鏅版槑浜嗐俠uild.make涓鑸寘鍚腑闂寸敓鎴愭枃浠剁殑渚濊禆瑙勫垯錛孌ependInfo.cmake涓鑸寘鍚簮浠g爜鏂囦歡鑷韓鐨勪緷璧栬鍒欍?/pre>姣旇緝閲嶈鐨勬槸flags.make鍜宭ink.txt錛屽墠鑰呬竴鑸寘鍚簡綾諱技浜嶨CC鐨?I鐨勭浉鍏充俊鎭紝濡傛悳绱㈣礬寰勶紝瀹忓畾涔夌瓑錛涘悗鑰呭垯鍖呭惈浜嗘渶緇堢敓鎴恡arget鏃跺欑殑linkage淇℃伅錛屽簱鎼滅儲璺緞絳夈?/pre>榪欎簺淇℃伅鍦ㄥ嚭鐜伴棶棰樼殑鏃跺欐槸涓緢濂界殑杈呭姪璋冭瘯鎵嬫銆?/pre>
涓鑸父鐢ㄧ殑鏄細
include_directories錛堬級鐢ㄤ簬娣誨姞澶存枃浠剁殑鍖呭惈鎼滅儲璺緞cmake --help-command include_directoriescmake version 2.6-patch 4------------------------------------------------------------------------------SingleIteminclude_directoriesAdd include directories to the build.include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)Add the given directories to those searched by the compiler forinclude files. By default the directories are appended onto thecurrent list of directories. This default behavior can be changed bysetting CMAKE_include_directories_BEFORE to ON. By using BEFORE orAFTER you can select between appending and prepending, independentfrom the default. If the SYSTEM option is given the compiler will betold that the directories are meant as system include directories onsome platforms.link_directories()鐢ㄤ簬娣誨姞鏌ユ壘搴撴枃浠剁殑鎼滅儲璺緞cmake --help-command link_directoriescmake version 2.6-patch 4------------------------------------------------------------------------------SingleItemlink_directoriesSpecify directories in which the linker will look for libraries.link_directories(directory1 directory2 ...)Specify the paths in which the linker should search for libraries.The command will apply only to targets created after it is called.For historical reasons, relative paths given to this command arepassed to the linker unchanged (unlike many CMake commands whichinterpret them relative to the current source directory).
涓鑸閮ㄥ簱鐨刲ink鏂瑰紡鍙互閫氳繃涓ょ鏂規硶鏉ュ仛錛屼竴縐嶆槸鏄劇ず娣誨姞璺緞錛岄噰鐢╨ink_directories()錛?涓縐嶆槸閫氳繃find_library()鍘繪煡鎵懼搴旂殑搴撶殑緇濆璺緞銆?/p>
鍚庝竴縐嶆柟娉曟槸鏇村ソ鐨勶紝鍥犱負瀹冨彲浠ュ噺灝戜笉灝戞綔鍦ㄧ殑鍐茬獊銆?/p>
涓鑸琭ind_library浼氭牴鎹竴浜涢粯璁よ鍒欐潵鎼滅儲鏂囦歡錛屽鏋滄壘鍒幫紝灝嗕細set浼犲叆鐨勭涓涓彉閲忓弬鏁般佸惁鍒欙紝瀵瑰簲鐨勫弬鏁頒笉琚畾涔夛紝騫朵笖鏈変竴涓獂xx-NOTFOUND琚畾涔夛紱鍙互閫氳繃榪欑鏂瑰紡鏉ヨ皟璇曞簱鎼滅儲鏄惁鎴愬姛銆?/p>
瀵逛簬搴撴枃浠剁殑鍚嶅瓧鑰岃█錛屽姩鎬佸簱鎼滅儲鐨勬椂鍊欎細鑷姩鎼滅儲libxxx.so (xxx.dll),闈欐佸簱鍒欐槸libxxx.a錛坸xx.lib錛夛紝瀵逛簬鍔ㄦ佸簱鍜岄潤鎬佸簱娣風敤鐨勬儏鍐碉紝鍙兘浼氬嚭鐜頒竴浜涙販涔憋紝闇瑕佹牸澶栧皬蹇冿紱涓鑸敖閲忓仛鍖歸厤榪炴帴銆?/p>
鎵璋撶殑rpath鏄拰鍔ㄦ佸簱鐨勫姞杞借繍琛岀浉鍏崇殑銆傛垜涓鑸噰鐢ㄥ涓嬬殑鏂瑰紡鍙栦唬榛樿娣誨姞鐨剅path錛?/p>
# RPATH and library search settingSET(CMAKE_SKIP_BUILD_RPATH FALSE)SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/nesim/lib")SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
cat xxx.txt | grep "yyy" | wc 鈥搇
闂鏄繖涓父瑙佺殑pipeline鎿嶄綔涓鑸渶灝戜細璧峰灝戜釜榪涚▼錛熺粨鏋滈偅浣嶈佸厔鍊掓槸鎰d簡鍗婂ぉ鐒跺悗鐩棤琛ㄦ儏銆?/p>
鎴戝彧濂界戶緇敔鍙ㄧ殑瑙i噴浜嗕竴涓嬩竴鑸琾ipe鐨勬搷浣滈渶瑕佽鍙栦竴涓繘紼嬬殑杈撳叆錛岀劧鍚庡皢杈撳嚭閫佺粰涓嬩竴涓繘紼嬶紱鍏跺疄鎴戝笇鏈涘鏂瑰共鑴嗗埄钀界殑鍥炵瓟鏄湁3涓紝榪欎釜闂灝辯畻鏄彲浠ヤ簡錛涙垜浠富瑕佷笉鏄敤鑴氭湰寮鍙戯紝浣嗘槸濡傛灉鏈夎繖涓妧鑳芥槸鑳藉緱鍒伴澶栫殑璁ゅ彲鐨勩?/p>
TL涓婄殑澶ц櫨浠灉鐒舵槸鎯蟲硶浼楀錛岀珛椹湁浜虹珯鍑烘潵闂細鎴戞兂鐭ラ亾絳旀鏄嚑涓紵鐩存帴璁╂垜鎬鐤戞槸涓嶆槸鎴戠殑鑴戣鏈夐棶棰樸傚悗鏉ユ湁浜虹粰鍑轟簡鍙兘鏄?涓殑鎯呭艦錛?/p>
鏌愪釜鍙樻佺殑shell鍙兘鍐呯疆浜哻at,浣垮叾鎴愪負涓涓猙uiltin錛岀劧鍚庤嚜宸辮秺淇庝唬搴栫殑璇誨彇鏍囧噯杈撳叆錛屽茍涓斿皢鍐呭鏂囨湰杈撳嚭錛岄偅涔堣繘紼嬪氨灝戜竴涓?/p>
璧峰垵鎴戣寰楄繖涓В閲婂茍涓嶈兘鎴愮珛錛屼絾鏄粡榪囧嚑涓佸ぇ鐨勮В閲婅繕鏄槑鐧戒簡浠栨墍璇寸殑鎯呭喌鏄痵hell鐨刡uiltin銆?/p>
涓棿鍙堣璁鴻搗閭d簺鍙兘鏄痓uiltin鐨刢ommand錛屼婦鍑虹殑渚嬪瓙鏄痗d/kill/time錛屼絾鏄垜鏌ヤ簡涓涓婼olaris涓婄殑錛屽悗涓や釜閮芥槸executable錛宑d鎵懼埌涓涓?usr/bin/cd 鐨刱sh錛屽唴瀹瑰涓嬶細
#!/bin/kshcommand = `basename $0`$command $@
榪欎釜緇撴灉鏈潵榪樻槸鎸哄嚭涔庢垜鐨勬剰鏂欑殑錛屼簬鏄垜涔熸兂褰撶劧鐨勮涓猴紝shell閲岃竟涓嶈兘鐩存帴璋冪敤syscall錛?/pre>寰堝揩灝卞緱璇佽繖涓彛嫻嬬函綺規槸閿欒鐨勶紱浠ュ墠榪樼湡娌℃兂榪囪繖涓棶棰橈紝鏌ヤ簡涓媤ikipedia銆乬oogle涔嬪悗寰楀埌寰堝鎰忔枡涔嬪鐨勬敹鑾楓?/pre>鏈鍚庡眳鐒舵湁浜烘惉鍑轟簡busybox榪欎釜澶ф棗錛堝仛榪囧祵鍏ュ紡鐨勫ぇ澶氶兘鐭ラ亾浜涳級錛屽茍澹扮О瀹冩妸vi涔焍uiltin浜嗐?/pre>榪欎笅涔熷緢鍑轟箮鎴戠殑鎰忔枡錛屼笉欏炬垜娌℃湁浠旂粏鐮旂┒榪囷紝娌℃湁浠涔堝彂璦鏉冦?/pre>涓嶈繃鏈鍚庢湁浜虹珯鍑烘潵璇達紝busybox騫舵病鏈夊唴緗繖浜涙兂褰撶劧鐨剉i錛岃屾槸澶ч儴鍒嗕篃鍗曠嫭璧瘋繘紼嬩簡錛涘湪Unix鐨勫摬瀛﹂噷杈癸紝鍋氳繖浜涘ぇ鑰屽叏鐨勪笢瑗垮叾瀹炴槸涓嶈榧撳姳鐨勶紝鍥犱負瀹冭繚鍙島nix鐨勫摬瀛︺?/pre>璇濊鍥炴潵錛岄潰璇曠殑鏃跺欙紝鎴戜箣鎵浠ヤ細闂埌榪欐牱鐨勯棶棰橈紝涔熸槸鏈夊緢鐪熷疄鐨刡ackground鐨勩傛浘緇忔垜浠煡榪囩殑涓涓緢璇″紓鐨刾erformance bottleneck灝辨槸鐢變簬shell鑴氭鐨勯棶棰樺紩璧風殑銆?/pre>====================================================================================================闂鏈韓涔熸槸姣旇緝鐩磋鐨勶紙褰撶劧鏄滀簨鍚庤钁涒濅簡錛夛細鏌愭紼嬪簭鐨勫惎鍔ㄨ剼鏈嬌鐢ㄥ涓嬬殑涓滀笢鏉ユ嫻嬬幆澧冿細exists=`netstat -rn | grep "xx.xx.xx.xx" | wc -l`if [ $exists -eq 0 ];thenidx=`ifconfig -an | grep bge0 | awk -F":" '{print $2}' | uniq | sort | tail`"ifconfig bge0:`echo $idx + 1 | bc` plumb upifconfig bge0:`echo $idx + 1 | bc` xx.xx.xx.xx netmask 255.255.255.0fi褰撴湁寰堝涓悓鏍風殑榪涚▼錛?gt;500)鎭板ソ浜庡悓涓鏃跺埢璺戝埌榪欎釜鍒濆鍖栫偣鐨勬椂鍊欙紝濡傛灉緋葷粺涓婂凡緇忓瓨鍦ㄧ殑IP鍦板潃寰堝錛堝綋鏃剁殑鍦烘櫙澶ф鏈?000+錛夛紝閭d箞netstat銆乮fconfig鏈韓閮藉彉寰楅潪甯歌楁椂錛屽姞涓婂涓繘紼嬬殑鍘熷洜錛岀郴緇熶腑浼氭湁N澶氫釜榪涚▼鍦ㄦ秷鑰楃潃璧勬簮錛?/p>
鍚庢灉鐨勪弗閲嶇▼搴︽槸浠諱綍shell閮藉仠姝㈠搷搴旓紝鏁板崄鍒嗛挓閮介櫡鍏ュ亣姝伙紝涓嶅緱涓嶉噸鍚數婧愪簡浜嬨?/p>
褰撶劧鐨勫垎鏋愮粨鏋滃彂鐜幫紝鐪熸鍗犵敤鐨凜PU閮芥槸澶勪簬kernel鐘舵佺殑錛屽茍涓斾嬌鐢ㄧ巼瓚呰繃99%錛岄暱闀跨殑pipeline甯︽潵鐨勫紑閿錛岀浉褰撲竴閮ㄥ垎鍙兘鏉ユ簮浜庝簰鐩哥瓑寰匔PU鐨勮繘紼嬬殑浜掔浉鎶㈠崰銆?/p>
瑙e喅鐨勬柟娉曡嚜鐒朵篃寰堢畝鍗曪紝榪欓噷涓嶈禈榪頒簡銆?/p>
=========================================================================
褰撴椂浠ヤ負瀵硅繖涓棶棰樻悶寰楃畻鏄瘮杈冩槑鐧戒簡錛岀粨鏋滄嬁鍑烘潵涓璁ㄨ錛屽彂鐜拌嚜宸變笉浜嗚В鐨勮繕鐪熶笉灝戙?/p>
]]>
鍏朵腑鏍稿績鐨勯儴鍒嗘槸閫氳繃python鐨剆ubproces module涓殑Popen鏉ヨ皟鐢╯hell鑴氭瀹屾垚鍔熻兘鎬ц姹傦紝騫舵姄鍙栨墽琛岀殑緇撴灉銆?/font>
鍒濅竴寮濮嬶紝test case姣旇緝灝戠殑鏃跺欙紙100涓互鍐咃級閮芥病鏈変換浣曢棶棰橈紱浣嗕粠鏌愪竴鍒昏搗錛屽綋瓚呰繃120涓殑鏃跺欙紝鏈鍚庝竴涓猼est case鎵ц鐨勬椂鍊欙紝鎬繪槸鎶ュ憡
OSError錛?too many open files
緇欏嚭鐨剆tack trace鎸囧悜浜哖open鐨刢ommunicate鏂規硶銆?/font>
鏈綆鍗曠殑鎬鐤戣嚜鐒舵槸鎵撳紑鏂囦歡鏁扮殑闄愬埗浜嗭紝 ulimit -a 鍙戠幇榛樿鐨凷hell鐨勭‘鍙湁256錛岃櫧鐒舵劅瑙夊簲璇ヤ篃澶熺敤浜嗭紙鍥犱負姣忎竴涓猚ase閮芥槸鐢ㄥ崟鐙殑Popen鏉ユ墽琛屾搷浣?瀹屾瘯灝卞簲璇ヨ鍥炴敹浜嗭級錛屼絾榪樻槸鑷劧灝嗗叾寮澶т竴浜涳紱
ulimit –n 1024
閲嶆柊鎵ц錛岃繕鏄渶鍚庝竴涓猚ase澶辮觸錛岄敊璇緷鐒躲?/font>
Google浜嗕竴涓嬶紝鏆傛椂娌℃湁澶寸華錛屽彧鏈夊緟鏈夋椂闂村啀璇︾粏鐩樻煡涓涓嬪師濮斾簡銆備笉榪囧湪鎼滅儲絳旀鐨勮繃紼嬩腑鍙戠幇浜嗕竴涓湁鎰忔濈殑鐜拌薄錛?/font>
鏈変漢鍦ㄨ闂庢牱灝唒ython鐨勫瓧絎︿覆quote鎴愪負涓涓彲浠ュ啀shell涓畨鍏ㄤ嬌鐢ㄧ殑瀛楃涓詫紝灝辨湁浜哄洖澶嶈Subprocess涓湁涓涓被浼肩殑鏂規硶鍙互瀹屾垚綾諱技鐨勫伐浣滀負浠涔堜笉鐢紱椹笂鏈夌墰浜虹珯鍑烘潵璇達紝榪欎釜妯″潡鐨勪綔鑰呭ぇ姒備笉鎯崇淮鎶よ繃澶氱殑涓滆タ錛屽洜鑰屽皢鍏墮殣钘忎簡璧鋒潵錛岃屼笉鏄斁寮浜嗙粰澶у鐢紝鍥犱負瀹冪殑doc閲岃竟閮芥病鏈夌洿鎺ヨ鏄庯紝鐢ㄧ殑浜烘槸鐪嬩簡浠栫殑浠g爜鎵嶇煡閬撴湁榪欎釜鍑芥暟錛堝弬鑰?/font>榪欓噷錛?/font>