锘??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
榪樺鍔犱簡涓涓柊鐨刾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>
]]>
鍙渶瑕佸湪./configure 鍚庤竟鍔犱笂 --with-ssl=<path>鍗沖彲銆?br>
寮濮嬬殑鏃跺欙紝娌$暀鎰忚繖涓紝鍥犱負綺楃暐鎵弿浜嗕竴涓?--help, 鍚庤竟榪欎箞璇翠簡錛?br>
LIBSSH2 installation (default: /usr/local/lib); when
possible, set the PKG_CONFIG_PATH environment
variable instead of using this option
鍚庢潵鎵嶅彂鐜?灝嗙幆澧冨彉閲忓仛灝忓箙璋冩暣銆佹敼鍔ㄦ潵鎺㈡祴)錛岃繖涓猟efault鍦⊿olaris涓婅竟騫朵笉鏄湡鐨刣efault,蹇呴』鏄劇ず鎸囧畾涓?usr/local/ssl,鍚﹀垯鎵懼埌鐨勫眳鐒舵槸/usr/sfw/銆?br>
]]>
cmake ..
make
add_library(libname_static STATIC src1 src2)
set_target_properties(libname_static OUTPUT_NAME ${libname})
add_library(libname SHARED src1 src2)
add_subdirectory(sub1)
add_subdirectory(sub2)
add_library(cryptolib SHARED IMPORTED)
#May have different dependent libraries
set(libsuffix ${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR})
set_target_properties(ssllib PROPERTIES IMPORTED_LOCATION "${project_top_dir}contrib/openssl/lib/libssl-${libsuffix}.so")
set_target_properties(cryptolib PROPERTIES IMPORTED_LOCATION "${project_top_dir}contrib/openssl/lib/libcrypto-${libsuffix}.so")
........................
#other CMakeLists.txt
add_executable(myExe src1 src2)
target_link_libraries(myExe ssllib cryptolib)
]]>
GNU autotools鎻愪緵浜嗕竴涓笉閿欑殑閫夋嫨錛屽彲浠ュ仛鍒扮粍緇囧伐鍏烽摼鏉ョ敓鎴愭墍闇鐨凪akefile錛屼絾緙洪櫡鏄涔犺搗鏉ユ瘮杈冮夯鐑︼紝鑰屼笖妯$増鏂囦歡鍐欒搗鏉ユ瘮杈冭垂鍔層傝佸疄璇存垜璺烳akefile鎵撲簡榪?騫寸殑浜ら亾錛屽嚑涔庢病鏈夎嚜宸卞啓榪嘺utomake鑴氭湰錛岀浉鍙嶇殑宸ヤ綔鍊掓槸騫蹭簡涓嶅皯錛岃濡傚垎鏋愮敓鎴愮殑Makefile榪愯榪囩▼錛岀劧鍚庢ā鎷熻嚜宸辨墜鍐橫akefile錛涘緱鍒頒竴涓交鐖界殑瀹氬埗鐜銆?br>
闄や簡autotools錛屽叾瀹炰篃鏈変笉灝戝叾浠栫殑宸ュ叿錛岃濡俛pache鐨刟nt錛屽熀浜嶱ython鐨剆cons錛沘nt鍦╦ava鐣屾槸榧庨紟澶у悕浜嗭紝鍙儨瀵筩++鐨勬敮鎸佺‘瀹炶鎴戞劅瑙夊緢涓嶄範鎯紱scons鍙風О鍙互宓屽叆Python浠g爜錛岀敤璧鋒潵涔熺畻綆鍗曪紝浣嗘槸鎯沖疄鐜板鏉傜殑鍔熻兘灝卞緢澶寸柤浜嗭紝鑰屼笖榪愯閫熷害璁╀漢鎸犲ご銆?br>
cmake鍒欏譏琛ヤ簡涓婅堪鍑犱釜宸ュ叿鐨勮澶氱己闄鳳細
1> 鏄撲簬瀛︿範錛屾枃妗f槗鎳傦紝鍙渶鐗㈣浠ヤ笅涓や釜鍛戒護鍗沖彲錛?br>
cmake --help-command-list
cmake --help-command xxx
cmake --help-variable-list
cmake --help-variable yyy
5> 鏀寔闆嗘垚ctest/cpack,鍓嶈呭彲浠ユ柟渚跨殑鍋氬崟鍏冩祴璇曪紝鍚庤呭垯鍙互鎵撳寘鐢熸垚tgz/rpm
6> 鏀寔澶氫釜鐢熸垚鍣紝鍙互鐢熸垚eclipse/codeblocks/gmake/unix make鏂囦歡錛岀敋鑷沖彲浠ョ敓鎴怴C鍚勪釜鐗堟湰鐨刣sw/sln.
7> 鍐呭祵璇█錛屽彲浠ヨ嚜宸卞啓鍑芥暟銆佸畯絳?br>
瀵逛簬緇忓父鍐欏皬嫻嬭瘯紼嬪簭鐨勪漢鏉ヨ錛屽湪test鐩綍涓嬪姞涓婁釜CMakeLists.txt錛岄噷杈瑰姞涓婂嚑琛岀畝鍗曠殑璇彞灝卞彲浠ユ柟渚跨殑浠ュ悗閲嶅浣跨敤浜嗐傚浜庤繖縐嶆儏鍐碉紝鎵嬪伐鍐欑殑Makefile紕板埌渚濊禆媯嫻嬭繖縐嶉夯鐑︾殑浜嬫儏寰寰鍔涗笉浠庡績錛宎utomake鍙堝お灝忛澶т綔錛岃宑make鍒欐伆鍒板ソ澶勪簡銆?br>
瀵逛簬澶у瀷紼嬪簭錛宑make鍙互鑷繁瀹氬埗鐢熸垚鐨勪腑闂存枃浠跺拰鐩爣鏂囦歡璺緞錛屾湁鏁堥伩鍏嶄簡automake甯︽潵鐨勬瘡涓洰褰曚笅鐢熸垚涓澶у爢鏂囦歡鐨勫紛绔紝涔熶笉闇瑕佹墜宸ュ啓Makefile銆?br>鏈鏈夌敤鐨勬槸鍙互鐢熸垚澶氫釜鐭ュ悕IDE鐨勫伐紼嬫枃浠訛紝鍖呮嫭Windows涓嬬殑vc6-vc9.
]]>
鐜板疄鐨勬儏鍐靛嵈鏄緢澶氶」鐩兘鏄粠鏈鍒濈殑鏁板崈琛屼唬鐮侀愭搴炲ぇ璧鋒潵錛涘紑濮嬬殑鏃跺欏彲鑳戒負浜嗗浘鏂逛究錛屽姞log鐨勬柟寮忓ぇ澶氭槸鑷繁鍦╥ostream鐨勫熀紜涓婅嚜宸卞皝瑁呬竴涓嬶紱絳夊埌欏圭洰鎵╁ぇ鏁板崄鍊嶇殑鏃跺欙紝鍗村彂鐜拌繖縐嶆柟寮忓緢鍔涗笉浠庡績錛孡og鏂囦歡鍑屼貢澶嶆潅錛岄毦浠ョ鐞嗐?br>
鐜版湁鐨刲og宸ュ叿錛屽熀鏈槸鍒嗕負涓や釜闃佃惀錛岀粡鍏哥殑syslog鍜岃姳鍝ㄥ己澶х殑log4j錛屼粠鑰岃鐢熷嚭寰堝涓彉浣撱俵og4j鍩烘湰宸茬粡鎴愪負澶嶆潅搴旂敤紼嬪簭鐨刲og鏍囧噯浜嗭紝鏃犲C++鐨勫嚑涓ā浠胯呯‘鍚勬湁鍗冪銆傛垜鐨勬儏鍐墊槸錛?br>1>涓嶉渶瑕佸鏉傜殑閰嶇疆錛岀敋鑷充笉闇瑕侀厤緗枃浠訛紝浣嗕慨鏀筶og娑堟伅鏍煎紡鍙堣寰堟柟渚?br>2>鏀寔鑷姩澶囦喚鍔熻兘
3>澶氱嚎紼嬪畨鍏?br>4>鏁堢巼瑕佸敖閲忛珮
5>涓嶈鏈夊叾浠栦緷璧?br>
log4cpp寰堣交鏄撶殑婊¤凍浜嗘垜鐨勮姹傦紝鍙渶瑕佺敤宸叉湁鐨凴ollingFileAppender鍑嗗濂藉悗绔紝鍒涘緩PatternLayout錛屼竴鍒囧氨鍙互浜嗭紱log綰у埆鐨勮緗畬鍏ㄥ拰syslog鍗忚涓鏍鳳紝寰堢洿瑙傦紝鎵搇og鍦版柟錛岃皟鐢ㄩ粯璁ょ殑Category綆$悊鍣ㄥ彇寰椾竴涓懡鍚嶇殑Category,鍏朵粬灝辨槸綆鍗曠殑璋冪敤浜? log(), debug(), notice(), info(), notice()....
鏈潵鏈鎰熷叴瓚g殑鏄痩og4cxx, Apache鐨勪紵澶ч」鐩紝鍔熻兘涔熸渶鍏紝楹葷儲鐨勬槸瀹冭嚜甯︿簡涓や釜騫沖彴搴擄紝闇瑕侀澶栦緷璧栵紱閰嶇疆鏂囦歡涔熻鏄劇ず鍑嗗錛屾劅瑙夊お鑷冭偪浜嗭紝浼拌澶ч」鐩噰鐢ㄧ殑鍚с?br>
鏁堢巼涓婃渶楂樼殑搴旇鏄痯antheiosle浜嗭紝鎹娌″紑鍚疞og鐨勬儏鍐典笅錛宱verhead鍑犱箮鏄?錛屼綔鑰呰嚜縐版晥鐜囨槸log4cxx鐨勬暟鍊嶏紝浣嗕篃渚濊禆浜嶴TLSoft錛堣櫧鐒跺彧鏈夊ご鏂囦歡錛?鍏舵墦鍖呮柟寮忎篃璁╀漢鎯抽伩鑰岃繙涔嬶紝榪樿鐢ㄤ綔鑰呰嚜宸卞啓鐨勭増鏈夋嫨鍣ㄦ潵閫変竴涓悎閫傜殑搴擄紙Win鐨勬儏鍐碉級銆?br>
榪樻湁涓涓槸Boost鐨刲ogging搴擄紝鐢ㄥ敖浜嗘ā鏉挎妧宸э紝铏界劧寰堢偒錛屽綋鏃舵病澶氬皯鐢紝涔熸病鏈夐氳繃boost 涓ユ牸鐨剅eview錛岃櫧鐒舵槸涓撳鍐欑殑錛屾殏鏃朵篃娌℃椂闂磋瘎浼板拰瀛︿範浜嗐?br>
]]>
絎竴姝ヨ鍋氱殑鑷劧鏄墜鍔ㄧ紪璇慓CC鐨勬簮浠g爜浜嗭紝鍥犱負鎴戞病鏈夋壘鍒癉ebian鐗堟湰鐨勫崌綰у寘錛屽共鑴嗚嚜宸變笅杞斤紝鎴戝彧闇瑕乬cc-core鍜実++涓や釜鍖呭氨鍙互浜嗭紝涓涓?5M錛屼竴涓?M錛屼笅杞藉掓槸鎸洪『鍒╋紝鍑犲垎閽熷氨OK浜嗭紝鎺ヤ笅鏉ュ氨鏄紪璇戜簡銆傚父瑙佺殑婧愮爜緙栬瘧姝ラ灝監K浜嗭細
./Configure
make
make install
鎴戦亣鍒扮殑鏄湁涓や釜鍏充簬澶氬鐞嗗櫒鐨勫紑鍙戝簱渚濊禆錛宎pt-get寰堝鏄撳氨瀹夎涓婂幓浜嗐?br>
緙栬瘧鐨勮繃紼嬪氨姣旇緝婕暱浜嗭紝鎴戠殑Pentium D 2.8G Dual Core媧葷敓鐢熷繖媧諱簡涓涓皬鍗堜紤鐨勬椂闂達紝璧鋒潵鍙戠幇榪樻病緙栬瘧瀹岋紝涓嶈繃鍗佸垎閽熶箣鍚庡氨鍙戠幇鎵鏈夌殑灝監K浜嗐?br>
TR1鐨勫簱錛宐oost鐨勭ず渚嬫瘮杈冨ソ錛屽叾涓?a >絎?1绔?/a>鏈夎緇嗙殑鍒楄〃鍜岀敤娉曠畝瑕佽鏄庛傚弬鐓ч偅涓煡浜嗕竴涓婫CC鐨勫ご鏂囦歡錛屽湪
/usr/local/include/c++/4.4.0/tr1/ 閲岃竟錛?br>
ls -lh | awk '$8 ~/^[a-z]+$/{print $8}'
array
ccomplex
cctype
cfenv
cfloat
cinttypes
climits
cmath
complex
cstdarg
cstdbool
cstdint
cstdio
cstdlib
ctgmath
ctime
cwchar
cwctype
functional
memory
random
regex
tuple
utility
鎴戞瘮杈冪啛鎮夊拰鏈熷緟鐨勬槸bind, function, auto, shared_ptr, mem_fn榪欏嚑涓簱浜嗭紝鍐欎簡涓皬渚嬪瓙楠岃瘉涔嬶細
// g++ -std=c++0x -o testC++0x testNewC++.cpp
2
3#include <tr1/memory>
4#include <tr1/functional>
5#include <tr1/tuple>
6#include <vector>
7#include <iostream>
8
9using namespace std;
10
11void func1(int i, int j, tr1::tuple<int, int, int> k)
12{
13 cout << "func1:" << i << ", " << j << ", "
14 << ", tuple param:[" << get<0>(k) << "," << get<1>(k)
15 << "," << get<2>(k) << "]" << endl;
16}
17
18
19void func2(int i, int j)
20{
21 cout << "func2: " << i << ", " << j << endl;
22}
23
24void func3(int k)
25{
26 cout << "func3: " << k << endl;
27}
28
29struct MyFunc1
30{
31 void memFun1(int i, int j)
32 {
33 cout << "MyFunc1::memFun1 :" << i << ", " << j << endl;
34 }
35
36 void memFun2(int i, int j, int k)
37 {
38 cout << "MyFunc1::memFun2 :" << i << ", " << j << ", " << k << endl;
39 }
40};
41
42int main()
43{
44
45 typedef tr1::function<void (int)> Func;
46 using std::tr1::bind;
47 using std::tr1::mem_fn;
48 using std::tr1::placeholders::_1;
49 using std::tr1::shared_ptr;
50
51 shared_ptr<MyFunc1> instPtr(new MyFunc1);
52 MyFunc1 functor;
53
54 vector<Func> funcs;
55 funcs.push_back(bind(&func1, _1, 2, tr1::make_tuple(3, 4, 5)));
56 funcs.push_back(bind(&func2, 1, _1));
57 funcs.push_back(&func3);
58 funcs.push_back(bind(&MyFunc1::memFun1, &functor, _1, 21));
59 funcs.push_back(bind(mem_fn(&MyFunc1::memFun2), &functor, 1, 2, _1));
60 funcs.push_back(bind(&MyFunc1::memFun1, instPtr, _1, 22));
61
62 for (auto it = funcs.begin(), itEnd = funcs.end();
63 it != itEnd; ++it)
64 {
65 (*it)(0);
66 }
67
68 return 0;
69}
緙栬瘧涔嬪悗錛岃繍琛岀粨鏋滃涓嬶細
func1:0, 2, , tuple param:[3,4,5]
func2: 1, 0
func3: 0
MyFunc1::memFun1 :0, 21
MyFunc1::memFun2 :1, 2, 0
MyFunc1::memFun1 :0, 22
浼拌榪欎箞濂囧鐨勭壒鎬э紝榪涘叆宸ヤ笟搴旂敤榪樺緱涓嶅皯鏃墮棿鍚э紝楹葷儲鐨勬爣鍑嗗寲...
]]>