[{"data":1,"prerenderedAt":4112},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa":3,"wiki-doc-items-2023-10-05-cplusplus-jiao-xue":3553,"wiki:author-members":4100},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":36,"chapterOrder":3540,"date":3541,"description":3542,"docKey":3543,"docRoot":3544,"docTitle":3545,"extension":3546,"isWikiDoc":68,"isWikiIndex":3547,"meta":3548,"navigation":68,"path":3549,"seo":3550,"stem":3551,"wikiDepth":36,"__hash__":3552},"wiki\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法.md","第三方库依赖写法",[7],"董佳辉",{"type":9,"value":10,"toc":3462},"minimark",[11,20,23,104,107,139,146,164,167,206,209,275,281,292,295,298,310,313,348,354,359,362,365,377,380,397,400,406,417,462,469,515,521,549,552,608,613,640,646,649,652,655,658,679,682,699,703,751,755,800,803,846,850,853,856,858,874,876,892,895,991,995,1064,1070,1113,1123,1127,1165,1168,1171,1213,1217,1227,1230,1232,1248,1250,1266,1269,1288,1291,1353,1356,1389,1396,1400,1403,1406,1408,1424,1426,1442,1445,1527,1530,1644,1647,1685,1692,1695,1704,1707,1709,1725,1727,1743,1746,1797,1800,1846,1849,1854,1857,1859,1875,1877,1893,1896,1947,1950,1987,1990,1995,1998,2000,2016,2018,2034,2037,2088,2098,2101,2106,2109,2111,2127,2129,2145,2148,2199,2202,2245,2249,2255,2258,2261,2264,2266,2282,2284,2306,2309,2360,2363,2415,2419,2422,2425,2427,2443,2445,2461,2464,2515,2518,2593,2597,2600,2603,2606,2609,2634,2637,2640,2691,2694,2745,2748,3008,3011,3048,3051,3055,3061,3133,3138,3177,3180,3184,3213,3216,3230,3234,3263,3265,3276,3279,3303,3306,3313,3317,3353,3357,3360,3368,3372,3375,3393,3396,3414,3417,3431,3435,3438,3444,3447,3458],[12,13,14,15,19],"p",{},"本节专门讲第三方库如何安装、如何在 CMake 中查找、如何放到模板的 ",[16,17,18],"code",{},"Third-party dependencies"," 区块里。",[12,21,22],{},"本模板的原则是：",[24,25,30],"pre",{"className":26,"code":27,"language":28,"meta":29,"style":29},"language-cmake shiki shiki-themes github-light github-dark","# ========================\n# Third-party dependencies\n# ========================\nfind_package(Eigen3 REQUIRED)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PUBLIC\n    Eigen3::Eigen\n)\n","cmake","",[16,31,32,41,47,52,63,70,85,92,98],{"__ignoreMap":29},[33,34,37],"span",{"class":35,"line":36},"line",1,[33,38,40],{"class":39},"sJ8bj","# ========================\n",[33,42,44],{"class":35,"line":43},2,[33,45,46],{"class":39},"# Third-party dependencies\n",[33,48,50],{"class":35,"line":49},3,[33,51,40],{"class":39},[33,53,55,59],{"class":35,"line":54},4,[33,56,58],{"class":57},"szBVR","find_package",[33,60,62],{"class":61},"sVt8B","(Eigen3 REQUIRED)\n",[33,64,66],{"class":35,"line":65},5,[33,67,69],{"emptyLinePlaceholder":68},true,"\n",[33,71,73,76,79,82],{"class":35,"line":72},6,[33,74,75],{"class":57},"target_link_libraries",[33,77,78],{"class":61},"(",[33,80,81],{"class":57},"${PREFIX}",[33,83,84],{"class":61},"_src_lib\n",[33,86,88],{"class":35,"line":87},7,[33,89,91],{"class":90},"sScJk","  PUBLIC\n",[33,93,95],{"class":35,"line":94},8,[33,96,97],{"class":61},"    Eigen3::Eigen\n",[33,99,101],{"class":35,"line":100},9,[33,102,103],{"class":61},")\n",[12,105,106],{},"也就是：",[108,109,110,117,123,133],"ol",{},[111,112,113,114,116],"li",{},"谁使用第三方库，谁写 ",[16,115,58],{},"。",[111,118,119,120,122],{},"第三方依赖集中放在本模块的 ",[16,121,18],{}," 区块。",[111,124,125,126,129,130,116],{},"优先链接现代 CMake target，例如 ",[16,127,128],{},"Eigen3::Eigen","、",[16,131,132],{},"OpenCV::opencv_core",[111,134,135,136,116],{},"不把所有第三方库都堆到顶层 ",[16,137,138],{},"CMakeLists.txt",[140,141,143,145],"h2",{"id":142},"find_package-基本语法",[16,144,58],{}," 基本语法",[24,147,149],{"className":26,"code":148,"language":28,"meta":29,"style":29},"find_package(\u003CPackageName> [version] [REQUIRED] [COMPONENTS components...])\n",[16,150,151],{"__ignoreMap":29},[33,152,153,155,158,161],{"class":35,"line":36},[33,154,58],{"class":57},[33,156,157],{"class":61},"(\u003CPackageName> [",[33,159,160],{"class":90},"version",[33,162,163],{"class":61},"] [REQUIRED] [COMPONENTS components...])\n",[12,165,166],{},"常见写法：",[24,168,170],{"className":26,"code":169,"language":28,"meta":29,"style":29},"find_package(Eigen3 REQUIRED)\nfind_package(OpenCV REQUIRED)\nfind_package(Boost REQUIRED COMPONENTS system filesystem)\nfind_package(PCL REQUIRED COMPONENTS common io)\n",[16,171,172,178,185,199],{"__ignoreMap":29},[33,173,174,176],{"class":35,"line":36},[33,175,58],{"class":57},[33,177,62],{"class":61},[33,179,180,182],{"class":35,"line":43},[33,181,58],{"class":57},[33,183,184],{"class":61},"(OpenCV REQUIRED)\n",[33,186,187,189,192,196],{"class":35,"line":49},[33,188,58],{"class":57},[33,190,191],{"class":61},"(Boost REQUIRED COMPONENTS ",[33,193,195],{"class":194},"sj4cs","system",[33,197,198],{"class":61}," filesystem)\n",[33,200,201,203],{"class":35,"line":54},[33,202,58],{"class":57},[33,204,205],{"class":61},"(PCL REQUIRED COMPONENTS common io)\n",[12,207,208],{},"参数说明：",[210,211,212,226],"table",{},[213,214,215],"thead",{},[216,217,218,223],"tr",{},[219,220,222],"th",{"align":221},"left","参数",[219,224,225],{"align":221},"作用",[227,228,229,246,255,265],"tbody",{},[216,230,231,237],{},[232,233,234],"td",{"align":221},[16,235,236],{},"\u003CPackageName>",[232,238,239,240,129,243],{"align":221},"包名，例如 ",[16,241,242],{},"Eigen3",[16,244,245],{},"OpenCV",[216,247,248,252],{},[232,249,250],{"align":221},[16,251,160],{},[232,253,254],{"align":221},"要求的最低版本或精确版本",[216,256,257,262],{},[232,258,259],{"align":221},[16,260,261],{},"REQUIRED",[232,263,264],{"align":221},"找不到就直接报错",[216,266,267,272],{},[232,268,269],{"align":221},[16,270,271],{},"COMPONENTS",[232,273,274],{"align":221},"只查找某些组件",[276,277,279],"h3",{"id":278},"required",[16,280,261],{},[24,282,284],{"className":26,"code":283,"language":28,"meta":29,"style":29},"find_package(Eigen3 REQUIRED)\n",[16,285,286],{"__ignoreMap":29},[33,287,288,290],{"class":35,"line":36},[33,289,58],{"class":57},[33,291,62],{"class":61},[12,293,294],{},"如果没找到 Eigen，CMake configure 阶段直接失败。",[12,296,297],{},"如果不写：",[24,299,301],{"className":26,"code":300,"language":28,"meta":29,"style":29},"find_package(Eigen3)\n",[16,302,303],{"__ignoreMap":29},[33,304,305,307],{"class":35,"line":36},[33,306,58],{"class":57},[33,308,309],{"class":61},"(Eigen3)\n",[12,311,312],{},"则需要自己判断：",[24,314,316],{"className":26,"code":315,"language":28,"meta":29,"style":29},"if(Eigen3_FOUND)\n  target_link_libraries(my_target PUBLIC Eigen3::Eigen)\nendif()\n",[16,317,318,326,340],{"__ignoreMap":29},[33,319,320,323],{"class":35,"line":36},[33,321,322],{"class":57},"if",[33,324,325],{"class":61},"(Eigen3_FOUND)\n",[33,327,328,331,334,337],{"class":35,"line":43},[33,329,330],{"class":57},"  target_link_libraries",[33,332,333],{"class":61},"(my_target ",[33,335,336],{"class":90},"PUBLIC",[33,338,339],{"class":61}," Eigen3::Eigen)\n",[33,341,342,345],{"class":35,"line":49},[33,343,344],{"class":57},"endif",[33,346,347],{"class":61},"()\n",[12,349,350,351,353],{},"工程模板里通常写 ",[16,352,261],{},"，因为依赖缺失时越早报错越好。",[276,355,357],{"id":356},"components",[16,358,271],{},[12,360,361],{},"OpenCV、Boost、PCL 这类库通常有多个模块。",[12,363,364],{},"例如：",[24,366,368],{"className":26,"code":367,"language":28,"meta":29,"style":29},"find_package(OpenCV REQUIRED COMPONENTS core imgproc highgui)\n",[16,369,370],{"__ignoreMap":29},[33,371,372,374],{"class":35,"line":36},[33,373,58],{"class":57},[33,375,376],{"class":61},"(OpenCV REQUIRED COMPONENTS core imgproc highgui)\n",[12,378,379],{},"表示只需要：",[108,381,382,387,392],{},[111,383,384],{},[16,385,386],{},"opencv_core",[111,388,389],{},[16,390,391],{},"opencv_imgproc",[111,393,394],{},[16,395,396],{},"opencv_highgui",[12,398,399],{},"这样比直接引入全部 OpenCV 更清楚。",[140,401,403,405],{"id":402},"target_link_libraries-里的依赖可见性",[16,404,75],{}," 里的依赖可见性",[12,407,408,409,129,411,129,414,116],{},"第三方库链接时也要考虑 ",[16,410,336],{},[16,412,413],{},"PRIVATE",[16,415,416],{},"INTERFACE",[210,418,419,429],{},[213,420,421],{},[216,422,423,426],{},[219,424,425],{"align":221},"关键字",[219,427,428],{"align":221},"什么时候用",[227,430,431,444,453],{},[216,432,433,437],{},[232,434,435],{"align":221},[16,436,413],{},[232,438,439,440,443],{"align":221},"第三方库只在 ",[16,441,442],{},".cpp"," 里使用，头文件不暴露它",[216,445,446,450],{},[232,447,448],{"align":221},[16,449,336],{},[232,451,452],{"align":221},"头文件里包含了第三方库类型，使用者也需要知道它",[216,454,455,459],{},[232,456,457],{"align":221},[16,458,416],{},[232,460,461],{"align":221},"当前 target 自己不编译，只向下游传递",[12,463,464,465,468],{},"例如，",[16,466,467],{},"lib1"," 的头文件如果只是这样：",[24,470,474],{"className":471,"code":472,"language":473,"meta":29,"style":29},"language-cpp shiki shiki-themes github-light github-dark","#pragma once\n\nnamespace lib1 {\nvoid run_eigen_vector_example();\n}\n","cpp",[16,475,476,484,488,499,510],{"__ignoreMap":29},[33,477,478,481],{"class":35,"line":36},[33,479,480],{"class":57},"#pragma",[33,482,483],{"class":90}," once\n",[33,485,486],{"class":35,"line":43},[33,487,69],{"emptyLinePlaceholder":68},[33,489,490,493,496],{"class":35,"line":49},[33,491,492],{"class":57},"namespace",[33,494,495],{"class":90}," lib1",[33,497,498],{"class":61}," {\n",[33,500,501,504,507],{"class":35,"line":54},[33,502,503],{"class":57},"void",[33,505,506],{"class":90}," run_eigen_vector_example",[33,508,509],{"class":61},"();\n",[33,511,512],{"class":35,"line":65},[33,513,514],{"class":61},"}\n",[12,516,517,518,520],{},"头文件没有暴露 Eigen 类型，那么 Eigen 可以用 ",[16,519,413],{},"：",[24,522,524],{"className":26,"code":523,"language":28,"meta":29,"style":29},"target_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    Eigen3::Eigen\n)\n",[16,525,526,536,541,545],{"__ignoreMap":29},[33,527,528,530,532,534],{"class":35,"line":36},[33,529,75],{"class":57},[33,531,78],{"class":61},[33,533,81],{"class":57},[33,535,84],{"class":61},[33,537,538],{"class":35,"line":43},[33,539,540],{"class":90},"  PRIVATE\n",[33,542,543],{"class":35,"line":49},[33,544,97],{"class":61},[33,546,547],{"class":35,"line":54},[33,548,103],{"class":61},[12,550,551],{},"如果头文件写成：",[24,553,555],{"className":471,"code":554,"language":473,"meta":29,"style":29},"#pragma once\n\n#include \u003CEigen\u002FDense>\n\nnamespace lib1 {\nEigen::Vector3d make_vector();\n}\n",[16,556,557,563,567,576,580,588,604],{"__ignoreMap":29},[33,558,559,561],{"class":35,"line":36},[33,560,480],{"class":57},[33,562,483],{"class":90},[33,564,565],{"class":35,"line":43},[33,566,69],{"emptyLinePlaceholder":68},[33,568,569,572],{"class":35,"line":49},[33,570,571],{"class":57},"#include",[33,573,575],{"class":574},"sZZnC"," \u003CEigen\u002FDense>\n",[33,577,578],{"class":35,"line":54},[33,579,69],{"emptyLinePlaceholder":68},[33,581,582,584,586],{"class":35,"line":65},[33,583,492],{"class":57},[33,585,495],{"class":90},[33,587,498],{"class":61},[33,589,590,593,596,599,602],{"class":35,"line":72},[33,591,592],{"class":90},"Eigen",[33,594,595],{"class":61},"::",[33,597,598],{"class":90},"Vector3d",[33,600,601],{"class":90}," make_vector",[33,603,509],{"class":61},[33,605,606],{"class":35,"line":87},[33,607,514],{"class":61},[12,609,610,611,520],{},"此时下游包含这个头文件时也需要 Eigen include 路径，所以应该用 ",[16,612,336],{},[24,614,616],{"className":26,"code":615,"language":28,"meta":29,"style":29},"target_link_libraries(${PREFIX}_src_lib\n  PUBLIC\n    Eigen3::Eigen\n)\n",[16,617,618,628,632,636],{"__ignoreMap":29},[33,619,620,622,624,626],{"class":35,"line":36},[33,621,75],{"class":57},[33,623,78],{"class":61},[33,625,81],{"class":57},[33,627,84],{"class":61},[33,629,630],{"class":35,"line":43},[33,631,91],{"class":90},[33,633,634],{"class":35,"line":49},[33,635,97],{"class":61},[33,637,638],{"class":35,"line":54},[33,639,103],{"class":61},[12,641,642,643,645],{},"本模板示例用 ",[16,644,336],{},"，是为了展示依赖传播；实际项目中可以按头文件是否暴露第三方类型来选择。",[140,647,242],{"id":648},"eigen3",[12,650,651],{},"Eigen 是常用线性代数库，主要是头文件库。",[276,653,654],{"id":654},"安装",[12,656,657],{},"Ubuntu\u002FDebian：",[24,659,663],{"className":660,"code":661,"language":662,"meta":29,"style":29},"language-bash shiki shiki-themes github-light github-dark","sudo apt install libeigen3-dev\n","bash",[16,664,665],{"__ignoreMap":29},[33,666,667,670,673,676],{"class":35,"line":36},[33,668,669],{"class":90},"sudo",[33,671,672],{"class":574}," apt",[33,674,675],{"class":574}," install",[33,677,678],{"class":574}," libeigen3-dev\n",[12,680,681],{},"Fedora：",[24,683,685],{"className":660,"code":684,"language":662,"meta":29,"style":29},"sudo dnf install eigen3-devel\n",[16,686,687],{"__ignoreMap":29},[33,688,689,691,694,696],{"class":35,"line":36},[33,690,669],{"class":90},[33,692,693],{"class":574}," dnf",[33,695,675],{"class":574},[33,697,698],{"class":574}," eigen3-devel\n",[276,700,702],{"id":701},"cmake-写法","CMake 写法",[24,704,705],{"className":26,"code":27,"language":28,"meta":29,"style":29},[16,706,707,711,715,719,725,729,739,743,747],{"__ignoreMap":29},[33,708,709],{"class":35,"line":36},[33,710,40],{"class":39},[33,712,713],{"class":35,"line":43},[33,714,46],{"class":39},[33,716,717],{"class":35,"line":49},[33,718,40],{"class":39},[33,720,721,723],{"class":35,"line":54},[33,722,58],{"class":57},[33,724,62],{"class":61},[33,726,727],{"class":35,"line":65},[33,728,69],{"emptyLinePlaceholder":68},[33,730,731,733,735,737],{"class":35,"line":72},[33,732,75],{"class":57},[33,734,78],{"class":61},[33,736,81],{"class":57},[33,738,84],{"class":61},[33,740,741],{"class":35,"line":87},[33,742,91],{"class":90},[33,744,745],{"class":35,"line":94},[33,746,97],{"class":61},[33,748,749],{"class":35,"line":100},[33,750,103],{"class":61},[276,752,754],{"id":753},"c-使用","C++ 使用",[24,756,758],{"className":471,"code":757,"language":473,"meta":29,"style":29},"#include \u003CEigen\u002FDense>\n\nEigen::Vector3d v(1.0, 2.0, 3.0);\n",[16,759,760,766,770],{"__ignoreMap":29},[33,761,762,764],{"class":35,"line":36},[33,763,571],{"class":57},[33,765,575],{"class":574},[33,767,768],{"class":35,"line":43},[33,769,69],{"emptyLinePlaceholder":68},[33,771,772,774,776,778,781,783,786,789,792,794,797],{"class":35,"line":49},[33,773,592],{"class":90},[33,775,595],{"class":61},[33,777,598],{"class":90},[33,779,780],{"class":90}," v",[33,782,78],{"class":61},[33,784,785],{"class":194},"1.0",[33,787,788],{"class":61},", ",[33,790,791],{"class":194},"2.0",[33,793,788],{"class":61},[33,795,796],{"class":194},"3.0",[33,798,799],{"class":61},");\n",[276,801,802],{"id":802},"可见性建议",[210,804,805,815],{},[213,806,807],{},[216,808,809,812],{},[219,810,811],{"align":221},"场景",[219,813,814],{"align":221},"链接方式",[227,816,817,830],{},[216,818,819,825],{},[232,820,821,822,824],{"align":221},"Eigen 只在 ",[16,823,442],{}," 中使用",[232,826,827],{"align":221},[16,828,829],{},"PRIVATE Eigen3::Eigen",[216,831,832,841],{},[232,833,834,835,129,838],{"align":221},"头文件暴露 ",[16,836,837],{},"Eigen::Matrix",[16,839,840],{},"Eigen::Vector",[232,842,843],{"align":221},[16,844,845],{},"PUBLIC Eigen3::Eigen",[140,847,849],{"id":848},"opencv4","OpenCV4",[12,851,852],{},"OpenCV 是计算机视觉库，模块很多，建议按组件引入。",[276,854,654],{"id":855},"安装-1",[12,857,657],{},[24,859,861],{"className":660,"code":860,"language":662,"meta":29,"style":29},"sudo apt install libopencv-dev\n",[16,862,863],{"__ignoreMap":29},[33,864,865,867,869,871],{"class":35,"line":36},[33,866,669],{"class":90},[33,868,672],{"class":574},[33,870,675],{"class":574},[33,872,873],{"class":574}," libopencv-dev\n",[12,875,681],{},[24,877,879],{"className":660,"code":878,"language":662,"meta":29,"style":29},"sudo dnf install opencv-devel\n",[16,880,881],{"__ignoreMap":29},[33,882,883,885,887,889],{"class":35,"line":36},[33,884,669],{"class":90},[33,886,693],{"class":574},[33,888,675],{"class":574},[33,890,891],{"class":574}," opencv-devel\n",[276,893,894],{"id":894},"常用组件",[210,896,897,906],{},[213,898,899],{},[216,900,901,904],{},[219,902,903],{"align":221},"组件",[219,905,225],{"align":221},[227,907,908,921,931,941,951,961,971,981],{},[216,909,910,915],{},[232,911,912],{"align":221},[16,913,914],{},"core",[232,916,917,918],{"align":221},"基础数据结构，例如 ",[16,919,920],{},"cv::Mat",[216,922,923,928],{},[232,924,925],{"align":221},[16,926,927],{},"imgproc",[232,929,930],{"align":221},"图像处理",[216,932,933,938],{},[232,934,935],{"align":221},[16,936,937],{},"imgcodecs",[232,939,940],{"align":221},"读写图片",[216,942,943,948],{},[232,944,945],{"align":221},[16,946,947],{},"highgui",[232,949,950],{"align":221},"简单窗口显示",[216,952,953,958],{},[232,954,955],{"align":221},[16,956,957],{},"videoio",[232,959,960],{"align":221},"摄像头和视频读写",[216,962,963,968],{},[232,964,965],{"align":221},[16,966,967],{},"calib3d",[232,969,970],{"align":221},"相机标定、几何",[216,972,973,978],{},[232,974,975],{"align":221},[16,976,977],{},"features2d",[232,979,980],{"align":221},"特征点",[216,982,983,988],{},[232,984,985],{"align":221},[16,986,987],{},"dnn",[232,989,990],{"align":221},"DNN 推理模块",[276,992,994],{"id":993},"cmake-写法推荐按组件","CMake 写法：推荐按组件",[24,996,998],{"className":26,"code":997,"language":28,"meta":29,"style":29},"# ========================\n# Third-party dependencies\n# ========================\nfind_package(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs highgui)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    opencv_core\n    opencv_imgproc\n    opencv_imgcodecs\n    opencv_highgui\n)\n",[16,999,1000,1004,1008,1012,1019,1023,1033,1037,1042,1047,1053,1059],{"__ignoreMap":29},[33,1001,1002],{"class":35,"line":36},[33,1003,40],{"class":39},[33,1005,1006],{"class":35,"line":43},[33,1007,46],{"class":39},[33,1009,1010],{"class":35,"line":49},[33,1011,40],{"class":39},[33,1013,1014,1016],{"class":35,"line":54},[33,1015,58],{"class":57},[33,1017,1018],{"class":61},"(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs highgui)\n",[33,1020,1021],{"class":35,"line":65},[33,1022,69],{"emptyLinePlaceholder":68},[33,1024,1025,1027,1029,1031],{"class":35,"line":72},[33,1026,75],{"class":57},[33,1028,78],{"class":61},[33,1030,81],{"class":57},[33,1032,84],{"class":61},[33,1034,1035],{"class":35,"line":87},[33,1036,540],{"class":90},[33,1038,1039],{"class":35,"line":94},[33,1040,1041],{"class":61},"    opencv_core\n",[33,1043,1044],{"class":35,"line":100},[33,1045,1046],{"class":61},"    opencv_imgproc\n",[33,1048,1050],{"class":35,"line":1049},10,[33,1051,1052],{"class":61},"    opencv_imgcodecs\n",[33,1054,1056],{"class":35,"line":1055},11,[33,1057,1058],{"class":61},"    opencv_highgui\n",[33,1060,1062],{"class":35,"line":1061},12,[33,1063,103],{"class":61},[12,1065,1066,1067,1069],{},"有些 OpenCV 安装会提供 ",[16,1068,132],{}," 这种 imported target，也可以写：",[24,1071,1073],{"className":26,"code":1072,"language":28,"meta":29,"style":29},"target_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    OpenCV::opencv_core\n    OpenCV::opencv_imgproc\n    OpenCV::opencv_imgcodecs\n    OpenCV::opencv_highgui\n)\n",[16,1074,1075,1085,1089,1094,1099,1104,1109],{"__ignoreMap":29},[33,1076,1077,1079,1081,1083],{"class":35,"line":36},[33,1078,75],{"class":57},[33,1080,78],{"class":61},[33,1082,81],{"class":57},[33,1084,84],{"class":61},[33,1086,1087],{"class":35,"line":43},[33,1088,540],{"class":90},[33,1090,1091],{"class":35,"line":49},[33,1092,1093],{"class":61},"    OpenCV::opencv_core\n",[33,1095,1096],{"class":35,"line":54},[33,1097,1098],{"class":61},"    OpenCV::opencv_imgproc\n",[33,1100,1101],{"class":35,"line":65},[33,1102,1103],{"class":61},"    OpenCV::opencv_imgcodecs\n",[33,1105,1106],{"class":35,"line":72},[33,1107,1108],{"class":61},"    OpenCV::opencv_highgui\n",[33,1110,1111],{"class":35,"line":87},[33,1112,103],{"class":61},[12,1114,1115,1116,1119,1120,1122],{},"如果你的系统没有这些 ",[16,1117,1118],{},"OpenCV::"," target，就使用前一种 ",[16,1121,386],{}," 写法。",[276,1124,1126],{"id":1125},"cmake-写法简单粗暴版","CMake 写法：简单粗暴版",[24,1128,1130],{"className":26,"code":1129,"language":28,"meta":29,"style":29},"find_package(OpenCV REQUIRED)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    ${OpenCV_LIBS}\n)\n",[16,1131,1132,1138,1142,1152,1156,1161],{"__ignoreMap":29},[33,1133,1134,1136],{"class":35,"line":36},[33,1135,58],{"class":57},[33,1137,184],{"class":61},[33,1139,1140],{"class":35,"line":43},[33,1141,69],{"emptyLinePlaceholder":68},[33,1143,1144,1146,1148,1150],{"class":35,"line":49},[33,1145,75],{"class":57},[33,1147,78],{"class":61},[33,1149,81],{"class":57},[33,1151,84],{"class":61},[33,1153,1154],{"class":35,"line":54},[33,1155,540],{"class":90},[33,1157,1158],{"class":35,"line":65},[33,1159,1160],{"class":57},"    ${OpenCV_LIBS}\n",[33,1162,1163],{"class":35,"line":72},[33,1164,103],{"class":61},[12,1166,1167],{},"这种写法能用，但不如组件写法清楚。模板教学推荐优先按组件写。",[276,1169,754],{"id":1170},"c-使用-1",[24,1172,1174],{"className":471,"code":1173,"language":473,"meta":29,"style":29},"#include \u003Copencv2\u002Fopencv.hpp>\n\ncv::Mat image = cv::imread(\"test.png\");\n",[16,1175,1176,1183,1187],{"__ignoreMap":29},[33,1177,1178,1180],{"class":35,"line":36},[33,1179,571],{"class":57},[33,1181,1182],{"class":574}," \u003Copencv2\u002Fopencv.hpp>\n",[33,1184,1185],{"class":35,"line":43},[33,1186,69],{"emptyLinePlaceholder":68},[33,1188,1189,1192,1195,1198,1201,1203,1206,1208,1211],{"class":35,"line":49},[33,1190,1191],{"class":90},"cv",[33,1193,1194],{"class":61},"::Mat image ",[33,1196,1197],{"class":57},"=",[33,1199,1200],{"class":90}," cv",[33,1202,595],{"class":61},[33,1204,1205],{"class":90},"imread",[33,1207,78],{"class":61},[33,1209,1210],{"class":574},"\"test.png\"",[33,1212,799],{"class":61},[140,1214,1216],{"id":1215},"boost","Boost",[12,1218,1219,1220,1222,1223,1226],{},"Boost 是大型 C++ 库集合。这里以 ",[16,1221,195],{}," 和 ",[16,1224,1225],{},"filesystem"," 为例。",[276,1228,654],{"id":1229},"安装-2",[12,1231,657],{},[24,1233,1235],{"className":660,"code":1234,"language":662,"meta":29,"style":29},"sudo apt install libboost-all-dev\n",[16,1236,1237],{"__ignoreMap":29},[33,1238,1239,1241,1243,1245],{"class":35,"line":36},[33,1240,669],{"class":90},[33,1242,672],{"class":574},[33,1244,675],{"class":574},[33,1246,1247],{"class":574}," libboost-all-dev\n",[12,1249,681],{},[24,1251,1253],{"className":660,"code":1252,"language":662,"meta":29,"style":29},"sudo dnf install boost-devel\n",[16,1254,1255],{"__ignoreMap":29},[33,1256,1257,1259,1261,1263],{"class":35,"line":36},[33,1258,669],{"class":90},[33,1260,693],{"class":574},[33,1262,675],{"class":574},[33,1264,1265],{"class":574}," boost-devel\n",[12,1267,1268],{},"如果只想安装少量组件，Ubuntu\u002FDebian 也可以按需安装类似：",[24,1270,1272],{"className":660,"code":1271,"language":662,"meta":29,"style":29},"sudo apt install libboost-system-dev libboost-filesystem-dev\n",[16,1273,1274],{"__ignoreMap":29},[33,1275,1276,1278,1280,1282,1285],{"class":35,"line":36},[33,1277,669],{"class":90},[33,1279,672],{"class":574},[33,1281,675],{"class":574},[33,1283,1284],{"class":574}," libboost-system-dev",[33,1286,1287],{"class":574}," libboost-filesystem-dev\n",[276,1289,702],{"id":1290},"cmake-写法-1",[24,1292,1294],{"className":26,"code":1293,"language":28,"meta":29,"style":29},"# ========================\n# Third-party dependencies\n# ========================\nfind_package(Boost REQUIRED COMPONENTS system filesystem)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    Boost::system\n    Boost::filesystem\n)\n",[16,1295,1296,1300,1304,1308,1318,1322,1332,1336,1344,1349],{"__ignoreMap":29},[33,1297,1298],{"class":35,"line":36},[33,1299,40],{"class":39},[33,1301,1302],{"class":35,"line":43},[33,1303,46],{"class":39},[33,1305,1306],{"class":35,"line":49},[33,1307,40],{"class":39},[33,1309,1310,1312,1314,1316],{"class":35,"line":54},[33,1311,58],{"class":57},[33,1313,191],{"class":61},[33,1315,195],{"class":194},[33,1317,198],{"class":61},[33,1319,1320],{"class":35,"line":65},[33,1321,69],{"emptyLinePlaceholder":68},[33,1323,1324,1326,1328,1330],{"class":35,"line":72},[33,1325,75],{"class":57},[33,1327,78],{"class":61},[33,1329,81],{"class":57},[33,1331,84],{"class":61},[33,1333,1334],{"class":35,"line":87},[33,1335,540],{"class":90},[33,1337,1338,1341],{"class":35,"line":94},[33,1339,1340],{"class":61},"    Boost::",[33,1342,1343],{"class":194},"system\n",[33,1345,1346],{"class":35,"line":100},[33,1347,1348],{"class":61},"    Boost::filesystem\n",[33,1350,1351],{"class":35,"line":1049},[33,1352,103],{"class":61},[276,1354,754],{"id":1355},"c-使用-2",[24,1357,1359],{"className":471,"code":1358,"language":473,"meta":29,"style":29},"#include \u003Cboost\u002Ffilesystem.hpp>\n\nboost::filesystem::path p{\".\"};\n",[16,1360,1361,1368,1372],{"__ignoreMap":29},[33,1362,1363,1365],{"class":35,"line":36},[33,1364,571],{"class":57},[33,1366,1367],{"class":574}," \u003Cboost\u002Ffilesystem.hpp>\n",[33,1369,1370],{"class":35,"line":43},[33,1371,69],{"emptyLinePlaceholder":68},[33,1373,1374,1376,1378,1380,1383,1386],{"class":35,"line":49},[33,1375,1215],{"class":90},[33,1377,595],{"class":61},[33,1379,1225],{"class":90},[33,1381,1382],{"class":61},"::path p{",[33,1384,1385],{"class":574},"\".\"",[33,1387,1388],{"class":61},"};\n",[12,1390,1391,1392,1395],{},"注意：如果使用 C++17 的 ",[16,1393,1394],{},"std::filesystem","，很多场景已经不需要 Boost.Filesystem。",[140,1397,1399],{"id":1398},"pcl","PCL",[12,1401,1402],{},"PCL 是点云库，机器人、三维感知、SLAM 项目中常用。",[276,1404,654],{"id":1405},"安装-3",[12,1407,657],{},[24,1409,1411],{"className":660,"code":1410,"language":662,"meta":29,"style":29},"sudo apt install libpcl-dev\n",[16,1412,1413],{"__ignoreMap":29},[33,1414,1415,1417,1419,1421],{"class":35,"line":36},[33,1416,669],{"class":90},[33,1418,672],{"class":574},[33,1420,675],{"class":574},[33,1422,1423],{"class":574}," libpcl-dev\n",[12,1425,681],{},[24,1427,1429],{"className":660,"code":1428,"language":662,"meta":29,"style":29},"sudo dnf install pcl-devel\n",[16,1430,1431],{"__ignoreMap":29},[33,1432,1433,1435,1437,1439],{"class":35,"line":36},[33,1434,669],{"class":90},[33,1436,693],{"class":574},[33,1438,675],{"class":574},[33,1440,1441],{"class":574}," pcl-devel\n",[276,1443,894],{"id":1444},"常用组件-1",[210,1446,1447,1455],{},[213,1448,1449],{},[216,1450,1451,1453],{},[219,1452,903],{"align":221},[219,1454,225],{"align":221},[227,1456,1457,1467,1477,1487,1497,1507,1517],{},[216,1458,1459,1464],{},[232,1460,1461],{"align":221},[16,1462,1463],{},"common",[232,1465,1466],{"align":221},"点类型、基础工具",[216,1468,1469,1474],{},[232,1470,1471],{"align":221},[16,1472,1473],{},"io",[232,1475,1476],{"align":221},"PCD\u002FPLY 等文件读写",[216,1478,1479,1484],{},[232,1480,1481],{"align":221},[16,1482,1483],{},"filters",[232,1485,1486],{"align":221},"滤波",[216,1488,1489,1494],{},[232,1490,1491],{"align":221},[16,1492,1493],{},"features",[232,1495,1496],{"align":221},"特征",[216,1498,1499,1504],{},[232,1500,1501],{"align":221},[16,1502,1503],{},"registration",[232,1505,1506],{"align":221},"配准",[216,1508,1509,1514],{},[232,1510,1511],{"align":221},[16,1512,1513],{},"segmentation",[232,1515,1516],{"align":221},"分割",[216,1518,1519,1524],{},[232,1520,1521],{"align":221},[16,1522,1523],{},"visualization",[232,1525,1526],{"align":221},"可视化",[276,1528,702],{"id":1529},"cmake-写法-2",[24,1531,1533],{"className":26,"code":1532,"language":28,"meta":29,"style":29},"# ========================\n# Third-party dependencies\n# ========================\nfind_package(PCL REQUIRED COMPONENTS common io filters)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    ${PCL_LIBRARIES}\n)\n\ntarget_include_directories(${PREFIX}_src_lib\n  PRIVATE\n    ${PCL_INCLUDE_DIRS}\n)\n\ntarget_compile_definitions(${PREFIX}_src_lib\n  PRIVATE\n    ${PCL_DEFINITIONS}\n)\n",[16,1534,1535,1539,1543,1547,1554,1558,1568,1572,1577,1581,1585,1596,1600,1606,1611,1616,1628,1633,1639],{"__ignoreMap":29},[33,1536,1537],{"class":35,"line":36},[33,1538,40],{"class":39},[33,1540,1541],{"class":35,"line":43},[33,1542,46],{"class":39},[33,1544,1545],{"class":35,"line":49},[33,1546,40],{"class":39},[33,1548,1549,1551],{"class":35,"line":54},[33,1550,58],{"class":57},[33,1552,1553],{"class":61},"(PCL REQUIRED COMPONENTS common io filters)\n",[33,1555,1556],{"class":35,"line":65},[33,1557,69],{"emptyLinePlaceholder":68},[33,1559,1560,1562,1564,1566],{"class":35,"line":72},[33,1561,75],{"class":57},[33,1563,78],{"class":61},[33,1565,81],{"class":57},[33,1567,84],{"class":61},[33,1569,1570],{"class":35,"line":87},[33,1571,540],{"class":90},[33,1573,1574],{"class":35,"line":94},[33,1575,1576],{"class":57},"    ${PCL_LIBRARIES}\n",[33,1578,1579],{"class":35,"line":100},[33,1580,103],{"class":61},[33,1582,1583],{"class":35,"line":1049},[33,1584,69],{"emptyLinePlaceholder":68},[33,1586,1587,1590,1592,1594],{"class":35,"line":1055},[33,1588,1589],{"class":57},"target_include_directories",[33,1591,78],{"class":61},[33,1593,81],{"class":57},[33,1595,84],{"class":61},[33,1597,1598],{"class":35,"line":1061},[33,1599,540],{"class":90},[33,1601,1603],{"class":35,"line":1602},13,[33,1604,1605],{"class":57},"    ${PCL_INCLUDE_DIRS}\n",[33,1607,1609],{"class":35,"line":1608},14,[33,1610,103],{"class":61},[33,1612,1614],{"class":35,"line":1613},15,[33,1615,69],{"emptyLinePlaceholder":68},[33,1617,1619,1622,1624,1626],{"class":35,"line":1618},16,[33,1620,1621],{"class":57},"target_compile_definitions",[33,1623,78],{"class":61},[33,1625,81],{"class":57},[33,1627,84],{"class":61},[33,1629,1631],{"class":35,"line":1630},17,[33,1632,540],{"class":90},[33,1634,1636],{"class":35,"line":1635},18,[33,1637,1638],{"class":57},"    ${PCL_DEFINITIONS}\n",[33,1640,1642],{"class":35,"line":1641},19,[33,1643,103],{"class":61},[12,1645,1646],{},"有些 PCL 版本也提供 imported targets。如果你的环境支持，可以优先使用类似：",[24,1648,1650],{"className":26,"code":1649,"language":28,"meta":29,"style":29},"target_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    PCL::common\n    PCL::io\n    PCL::filters\n)\n",[16,1651,1652,1662,1666,1671,1676,1681],{"__ignoreMap":29},[33,1653,1654,1656,1658,1660],{"class":35,"line":36},[33,1655,75],{"class":57},[33,1657,78],{"class":61},[33,1659,81],{"class":57},[33,1661,84],{"class":61},[33,1663,1664],{"class":35,"line":43},[33,1665,540],{"class":90},[33,1667,1668],{"class":35,"line":49},[33,1669,1670],{"class":61},"    PCL::common\n",[33,1672,1673],{"class":35,"line":54},[33,1674,1675],{"class":61},"    PCL::io\n",[33,1677,1678],{"class":35,"line":65},[33,1679,1680],{"class":61},"    PCL::filters\n",[33,1682,1683],{"class":35,"line":72},[33,1684,103],{"class":61},[12,1686,1687,1688,1691],{},"实际选择以你本机 ",[16,1689,1690],{},"find_package(PCL ...)"," 提供的结果为准。",[140,1693,1694],{"id":1694},"fmt",[12,1696,1697,1699,1700,1703],{},[16,1698,1694],{}," 是格式化输出库，C++20 ",[16,1701,1702],{},"std::format"," 的风格也来自它。",[276,1705,654],{"id":1706},"安装-4",[12,1708,657],{},[24,1710,1712],{"className":660,"code":1711,"language":662,"meta":29,"style":29},"sudo apt install libfmt-dev\n",[16,1713,1714],{"__ignoreMap":29},[33,1715,1716,1718,1720,1722],{"class":35,"line":36},[33,1717,669],{"class":90},[33,1719,672],{"class":574},[33,1721,675],{"class":574},[33,1723,1724],{"class":574}," libfmt-dev\n",[12,1726,681],{},[24,1728,1730],{"className":660,"code":1729,"language":662,"meta":29,"style":29},"sudo dnf install fmt-devel\n",[16,1731,1732],{"__ignoreMap":29},[33,1733,1734,1736,1738,1740],{"class":35,"line":36},[33,1735,669],{"class":90},[33,1737,693],{"class":574},[33,1739,675],{"class":574},[33,1741,1742],{"class":574}," fmt-devel\n",[276,1744,702],{"id":1745},"cmake-写法-3",[24,1747,1749],{"className":26,"code":1748,"language":28,"meta":29,"style":29},"# ========================\n# Third-party dependencies\n# ========================\nfind_package(fmt REQUIRED)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    fmt::fmt\n)\n",[16,1750,1751,1755,1759,1763,1770,1774,1784,1788,1793],{"__ignoreMap":29},[33,1752,1753],{"class":35,"line":36},[33,1754,40],{"class":39},[33,1756,1757],{"class":35,"line":43},[33,1758,46],{"class":39},[33,1760,1761],{"class":35,"line":49},[33,1762,40],{"class":39},[33,1764,1765,1767],{"class":35,"line":54},[33,1766,58],{"class":57},[33,1768,1769],{"class":61},"(fmt REQUIRED)\n",[33,1771,1772],{"class":35,"line":65},[33,1773,69],{"emptyLinePlaceholder":68},[33,1775,1776,1778,1780,1782],{"class":35,"line":72},[33,1777,75],{"class":57},[33,1779,78],{"class":61},[33,1781,81],{"class":57},[33,1783,84],{"class":61},[33,1785,1786],{"class":35,"line":87},[33,1787,540],{"class":90},[33,1789,1790],{"class":35,"line":94},[33,1791,1792],{"class":61},"    fmt::fmt\n",[33,1794,1795],{"class":35,"line":100},[33,1796,103],{"class":61},[276,1798,754],{"id":1799},"c-使用-3",[24,1801,1803],{"className":471,"code":1802,"language":473,"meta":29,"style":29},"#include \u003Cfmt\u002Fcore.h>\n\nauto s = fmt::format(\"value = {}\", 42);\n",[16,1804,1805,1812,1816],{"__ignoreMap":29},[33,1806,1807,1809],{"class":35,"line":36},[33,1808,571],{"class":57},[33,1810,1811],{"class":574}," \u003Cfmt\u002Fcore.h>\n",[33,1813,1814],{"class":35,"line":43},[33,1815,69],{"emptyLinePlaceholder":68},[33,1817,1818,1821,1824,1826,1829,1831,1834,1836,1839,1841,1844],{"class":35,"line":49},[33,1819,1820],{"class":57},"auto",[33,1822,1823],{"class":61}," s ",[33,1825,1197],{"class":57},[33,1827,1828],{"class":90}," fmt",[33,1830,595],{"class":61},[33,1832,1833],{"class":90},"format",[33,1835,78],{"class":61},[33,1837,1838],{"class":574},"\"value = {}\"",[33,1840,788],{"class":61},[33,1842,1843],{"class":194},"42",[33,1845,799],{"class":61},[140,1847,1848],{"id":1848},"spdlog",[12,1850,1851,1853],{},[16,1852,1848],{}," 是常用日志库。",[276,1855,654],{"id":1856},"安装-5",[12,1858,657],{},[24,1860,1862],{"className":660,"code":1861,"language":662,"meta":29,"style":29},"sudo apt install libspdlog-dev\n",[16,1863,1864],{"__ignoreMap":29},[33,1865,1866,1868,1870,1872],{"class":35,"line":36},[33,1867,669],{"class":90},[33,1869,672],{"class":574},[33,1871,675],{"class":574},[33,1873,1874],{"class":574}," libspdlog-dev\n",[12,1876,681],{},[24,1878,1880],{"className":660,"code":1879,"language":662,"meta":29,"style":29},"sudo dnf install spdlog-devel\n",[16,1881,1882],{"__ignoreMap":29},[33,1883,1884,1886,1888,1890],{"class":35,"line":36},[33,1885,669],{"class":90},[33,1887,693],{"class":574},[33,1889,675],{"class":574},[33,1891,1892],{"class":574}," spdlog-devel\n",[276,1894,702],{"id":1895},"cmake-写法-4",[24,1897,1899],{"className":26,"code":1898,"language":28,"meta":29,"style":29},"# ========================\n# Third-party dependencies\n# ========================\nfind_package(spdlog REQUIRED)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    spdlog::spdlog\n)\n",[16,1900,1901,1905,1909,1913,1920,1924,1934,1938,1943],{"__ignoreMap":29},[33,1902,1903],{"class":35,"line":36},[33,1904,40],{"class":39},[33,1906,1907],{"class":35,"line":43},[33,1908,46],{"class":39},[33,1910,1911],{"class":35,"line":49},[33,1912,40],{"class":39},[33,1914,1915,1917],{"class":35,"line":54},[33,1916,58],{"class":57},[33,1918,1919],{"class":61},"(spdlog REQUIRED)\n",[33,1921,1922],{"class":35,"line":65},[33,1923,69],{"emptyLinePlaceholder":68},[33,1925,1926,1928,1930,1932],{"class":35,"line":72},[33,1927,75],{"class":57},[33,1929,78],{"class":61},[33,1931,81],{"class":57},[33,1933,84],{"class":61},[33,1935,1936],{"class":35,"line":87},[33,1937,540],{"class":90},[33,1939,1940],{"class":35,"line":94},[33,1941,1942],{"class":61},"    spdlog::spdlog\n",[33,1944,1945],{"class":35,"line":100},[33,1946,103],{"class":61},[276,1948,754],{"id":1949},"c-使用-4",[24,1951,1953],{"className":471,"code":1952,"language":473,"meta":29,"style":29},"#include \u003Cspdlog\u002Fspdlog.h>\n\nspdlog::info(\"hello {}\", \"spdlog\");\n",[16,1954,1955,1962,1966],{"__ignoreMap":29},[33,1956,1957,1959],{"class":35,"line":36},[33,1958,571],{"class":57},[33,1960,1961],{"class":574}," \u003Cspdlog\u002Fspdlog.h>\n",[33,1963,1964],{"class":35,"line":43},[33,1965,69],{"emptyLinePlaceholder":68},[33,1967,1968,1970,1972,1975,1977,1980,1982,1985],{"class":35,"line":49},[33,1969,1848],{"class":90},[33,1971,595],{"class":61},[33,1973,1974],{"class":90},"info",[33,1976,78],{"class":61},[33,1978,1979],{"class":574},"\"hello {}\"",[33,1981,788],{"class":61},[33,1983,1984],{"class":574},"\"spdlog\"",[33,1986,799],{"class":61},[140,1988,1989],{"id":1989},"yaml-cpp",[12,1991,1992,1994],{},[16,1993,1989],{}," 常用于读取配置文件。",[276,1996,654],{"id":1997},"安装-6",[12,1999,657],{},[24,2001,2003],{"className":660,"code":2002,"language":662,"meta":29,"style":29},"sudo apt install libyaml-cpp-dev\n",[16,2004,2005],{"__ignoreMap":29},[33,2006,2007,2009,2011,2013],{"class":35,"line":36},[33,2008,669],{"class":90},[33,2010,672],{"class":574},[33,2012,675],{"class":574},[33,2014,2015],{"class":574}," libyaml-cpp-dev\n",[12,2017,681],{},[24,2019,2021],{"className":660,"code":2020,"language":662,"meta":29,"style":29},"sudo dnf install yaml-cpp-devel\n",[16,2022,2023],{"__ignoreMap":29},[33,2024,2025,2027,2029,2031],{"class":35,"line":36},[33,2026,669],{"class":90},[33,2028,693],{"class":574},[33,2030,675],{"class":574},[33,2032,2033],{"class":574}," yaml-cpp-devel\n",[276,2035,702],{"id":2036},"cmake-写法-5",[24,2038,2040],{"className":26,"code":2039,"language":28,"meta":29,"style":29},"# ========================\n# Third-party dependencies\n# ========================\nfind_package(yaml-cpp REQUIRED)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    yaml-cpp::yaml-cpp\n)\n",[16,2041,2042,2046,2050,2054,2061,2065,2075,2079,2084],{"__ignoreMap":29},[33,2043,2044],{"class":35,"line":36},[33,2045,40],{"class":39},[33,2047,2048],{"class":35,"line":43},[33,2049,46],{"class":39},[33,2051,2052],{"class":35,"line":49},[33,2053,40],{"class":39},[33,2055,2056,2058],{"class":35,"line":54},[33,2057,58],{"class":57},[33,2059,2060],{"class":61},"(yaml-cpp REQUIRED)\n",[33,2062,2063],{"class":35,"line":65},[33,2064,69],{"emptyLinePlaceholder":68},[33,2066,2067,2069,2071,2073],{"class":35,"line":72},[33,2068,75],{"class":57},[33,2070,78],{"class":61},[33,2072,81],{"class":57},[33,2074,84],{"class":61},[33,2076,2077],{"class":35,"line":87},[33,2078,540],{"class":90},[33,2080,2081],{"class":35,"line":94},[33,2082,2083],{"class":61},"    yaml-cpp::yaml-cpp\n",[33,2085,2086],{"class":35,"line":100},[33,2087,103],{"class":61},[12,2089,2090,2091,2093,2094,2097],{},"有些旧环境可能 target 名是 ",[16,2092,1989],{},"，如果 ",[16,2095,2096],{},"yaml-cpp::yaml-cpp"," 不存在，再根据报错调整。",[140,2099,2100],{"id":2100},"nlohmann_json",[12,2102,2103,2105],{},[16,2104,2100],{}," 是常用 JSON 库，通常是头文件库。",[276,2107,654],{"id":2108},"安装-7",[12,2110,657],{},[24,2112,2114],{"className":660,"code":2113,"language":662,"meta":29,"style":29},"sudo apt install nlohmann-json3-dev\n",[16,2115,2116],{"__ignoreMap":29},[33,2117,2118,2120,2122,2124],{"class":35,"line":36},[33,2119,669],{"class":90},[33,2121,672],{"class":574},[33,2123,675],{"class":574},[33,2125,2126],{"class":574}," nlohmann-json3-dev\n",[12,2128,681],{},[24,2130,2132],{"className":660,"code":2131,"language":662,"meta":29,"style":29},"sudo dnf install json-devel\n",[16,2133,2134],{"__ignoreMap":29},[33,2135,2136,2138,2140,2142],{"class":35,"line":36},[33,2137,669],{"class":90},[33,2139,693],{"class":574},[33,2141,675],{"class":574},[33,2143,2144],{"class":574}," json-devel\n",[276,2146,702],{"id":2147},"cmake-写法-6",[24,2149,2151],{"className":26,"code":2150,"language":28,"meta":29,"style":29},"# ========================\n# Third-party dependencies\n# ========================\nfind_package(nlohmann_json REQUIRED)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    nlohmann_json::nlohmann_json\n)\n",[16,2152,2153,2157,2161,2165,2172,2176,2186,2190,2195],{"__ignoreMap":29},[33,2154,2155],{"class":35,"line":36},[33,2156,40],{"class":39},[33,2158,2159],{"class":35,"line":43},[33,2160,46],{"class":39},[33,2162,2163],{"class":35,"line":49},[33,2164,40],{"class":39},[33,2166,2167,2169],{"class":35,"line":54},[33,2168,58],{"class":57},[33,2170,2171],{"class":61},"(nlohmann_json REQUIRED)\n",[33,2173,2174],{"class":35,"line":65},[33,2175,69],{"emptyLinePlaceholder":68},[33,2177,2178,2180,2182,2184],{"class":35,"line":72},[33,2179,75],{"class":57},[33,2181,78],{"class":61},[33,2183,81],{"class":57},[33,2185,84],{"class":61},[33,2187,2188],{"class":35,"line":87},[33,2189,540],{"class":90},[33,2191,2192],{"class":35,"line":94},[33,2193,2194],{"class":61},"    nlohmann_json::nlohmann_json\n",[33,2196,2197],{"class":35,"line":100},[33,2198,103],{"class":61},[276,2200,754],{"id":2201},"c-使用-5",[24,2203,2205],{"className":471,"code":2204,"language":473,"meta":29,"style":29},"#include \u003Cnlohmann\u002Fjson.hpp>\n\nnlohmann::json data;\ndata[\"name\"] = \"cmake_template\";\n",[16,2206,2207,2214,2218,2226],{"__ignoreMap":29},[33,2208,2209,2211],{"class":35,"line":36},[33,2210,571],{"class":57},[33,2212,2213],{"class":574}," \u003Cnlohmann\u002Fjson.hpp>\n",[33,2215,2216],{"class":35,"line":43},[33,2217,69],{"emptyLinePlaceholder":68},[33,2219,2220,2223],{"class":35,"line":49},[33,2221,2222],{"class":90},"nlohmann",[33,2224,2225],{"class":61},"::json data;\n",[33,2227,2228,2231,2234,2237,2239,2242],{"class":35,"line":54},[33,2229,2230],{"class":61},"data[",[33,2232,2233],{"class":574},"\"name\"",[33,2235,2236],{"class":61},"] ",[33,2238,1197],{"class":57},[33,2240,2241],{"class":574}," \"cmake_template\"",[33,2243,2244],{"class":61},";\n",[140,2246,2248],{"id":2247},"threads","Threads",[12,2250,2251,2252,2254],{},"C++ 标准线程库通常不需要安装额外包，但链接时建议用 CMake 的 ",[16,2253,2248],{}," 包。",[276,2256,654],{"id":2257},"安装-8",[12,2259,2260],{},"一般不需要单独安装。",[12,2262,2263],{},"如果缺少编译器工具链：",[12,2265,657],{},[24,2267,2269],{"className":660,"code":2268,"language":662,"meta":29,"style":29},"sudo apt install build-essential\n",[16,2270,2271],{"__ignoreMap":29},[33,2272,2273,2275,2277,2279],{"class":35,"line":36},[33,2274,669],{"class":90},[33,2276,672],{"class":574},[33,2278,675],{"class":574},[33,2280,2281],{"class":574}," build-essential\n",[12,2283,681],{},[24,2285,2287],{"className":660,"code":2286,"language":662,"meta":29,"style":29},"sudo dnf install gcc gcc-c++ make\n",[16,2288,2289],{"__ignoreMap":29},[33,2290,2291,2293,2295,2297,2300,2303],{"class":35,"line":36},[33,2292,669],{"class":90},[33,2294,693],{"class":574},[33,2296,675],{"class":574},[33,2298,2299],{"class":574}," gcc",[33,2301,2302],{"class":574}," gcc-c++",[33,2304,2305],{"class":574}," make\n",[276,2307,702],{"id":2308},"cmake-写法-7",[24,2310,2312],{"className":26,"code":2311,"language":28,"meta":29,"style":29},"# ========================\n# Third-party dependencies\n# ========================\nfind_package(Threads REQUIRED)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    Threads::Threads\n)\n",[16,2313,2314,2318,2322,2326,2333,2337,2347,2351,2356],{"__ignoreMap":29},[33,2315,2316],{"class":35,"line":36},[33,2317,40],{"class":39},[33,2319,2320],{"class":35,"line":43},[33,2321,46],{"class":39},[33,2323,2324],{"class":35,"line":49},[33,2325,40],{"class":39},[33,2327,2328,2330],{"class":35,"line":54},[33,2329,58],{"class":57},[33,2331,2332],{"class":61},"(Threads REQUIRED)\n",[33,2334,2335],{"class":35,"line":65},[33,2336,69],{"emptyLinePlaceholder":68},[33,2338,2339,2341,2343,2345],{"class":35,"line":72},[33,2340,75],{"class":57},[33,2342,78],{"class":61},[33,2344,81],{"class":57},[33,2346,84],{"class":61},[33,2348,2349],{"class":35,"line":87},[33,2350,540],{"class":90},[33,2352,2353],{"class":35,"line":94},[33,2354,2355],{"class":61},"    Threads::Threads\n",[33,2357,2358],{"class":35,"line":100},[33,2359,103],{"class":61},[276,2361,754],{"id":2362},"c-使用-6",[24,2364,2366],{"className":471,"code":2365,"language":473,"meta":29,"style":29},"#include \u003Cthread>\n\nstd::thread worker([] {\n    \u002F\u002F do work\n});\nworker.join();\n",[16,2367,2368,2375,2379,2395,2400,2405],{"__ignoreMap":29},[33,2369,2370,2372],{"class":35,"line":36},[33,2371,571],{"class":57},[33,2373,2374],{"class":574}," \u003Cthread>\n",[33,2376,2377],{"class":35,"line":43},[33,2378,69],{"emptyLinePlaceholder":68},[33,2380,2381,2384,2386,2389,2392],{"class":35,"line":49},[33,2382,2383],{"class":90},"std",[33,2385,595],{"class":61},[33,2387,2388],{"class":90},"thread",[33,2390,2391],{"class":90}," worker",[33,2393,2394],{"class":61},"([] {\n",[33,2396,2397],{"class":35,"line":54},[33,2398,2399],{"class":39},"    \u002F\u002F do work\n",[33,2401,2402],{"class":35,"line":65},[33,2403,2404],{"class":61},"});\n",[33,2406,2407,2410,2413],{"class":35,"line":72},[33,2408,2409],{"class":61},"worker.",[33,2411,2412],{"class":90},"join",[33,2414,509],{"class":61},[140,2416,2418],{"id":2417},"openmp","OpenMP",[12,2420,2421],{},"OpenMP 用于多线程并行计算。",[276,2423,654],{"id":2424},"安装-9",[12,2426,657],{},[24,2428,2430],{"className":660,"code":2429,"language":662,"meta":29,"style":29},"sudo apt install libomp-dev\n",[16,2431,2432],{"__ignoreMap":29},[33,2433,2434,2436,2438,2440],{"class":35,"line":36},[33,2435,669],{"class":90},[33,2437,672],{"class":574},[33,2439,675],{"class":574},[33,2441,2442],{"class":574}," libomp-dev\n",[12,2444,681],{},[24,2446,2448],{"className":660,"code":2447,"language":662,"meta":29,"style":29},"sudo dnf install libgomp\n",[16,2449,2450],{"__ignoreMap":29},[33,2451,2452,2454,2456,2458],{"class":35,"line":36},[33,2453,669],{"class":90},[33,2455,693],{"class":574},[33,2457,675],{"class":574},[33,2459,2460],{"class":574}," libgomp\n",[276,2462,702],{"id":2463},"cmake-写法-8",[24,2465,2467],{"className":26,"code":2466,"language":28,"meta":29,"style":29},"# ========================\n# Third-party dependencies\n# ========================\nfind_package(OpenMP REQUIRED)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    OpenMP::OpenMP_CXX\n)\n",[16,2468,2469,2473,2477,2481,2488,2492,2502,2506,2511],{"__ignoreMap":29},[33,2470,2471],{"class":35,"line":36},[33,2472,40],{"class":39},[33,2474,2475],{"class":35,"line":43},[33,2476,46],{"class":39},[33,2478,2479],{"class":35,"line":49},[33,2480,40],{"class":39},[33,2482,2483,2485],{"class":35,"line":54},[33,2484,58],{"class":57},[33,2486,2487],{"class":61},"(OpenMP REQUIRED)\n",[33,2489,2490],{"class":35,"line":65},[33,2491,69],{"emptyLinePlaceholder":68},[33,2493,2494,2496,2498,2500],{"class":35,"line":72},[33,2495,75],{"class":57},[33,2497,78],{"class":61},[33,2499,81],{"class":57},[33,2501,84],{"class":61},[33,2503,2504],{"class":35,"line":87},[33,2505,540],{"class":90},[33,2507,2508],{"class":35,"line":94},[33,2509,2510],{"class":61},"    OpenMP::OpenMP_CXX\n",[33,2512,2513],{"class":35,"line":100},[33,2514,103],{"class":61},[276,2516,754],{"id":2517},"c-使用-7",[24,2519,2521],{"className":471,"code":2520,"language":473,"meta":29,"style":29},"#include \u003Comp.h>\n\n#pragma omp parallel for\nfor (int i = 0; i \u003C 100; ++i) {\n    \u002F\u002F parallel work\n}\n",[16,2522,2523,2530,2534,2547,2584,2589],{"__ignoreMap":29},[33,2524,2525,2527],{"class":35,"line":36},[33,2526,571],{"class":57},[33,2528,2529],{"class":574}," \u003Comp.h>\n",[33,2531,2532],{"class":35,"line":43},[33,2533,69],{"emptyLinePlaceholder":68},[33,2535,2536,2538,2541,2544],{"class":35,"line":49},[33,2537,480],{"class":57},[33,2539,2540],{"class":90}," omp",[33,2542,2543],{"class":90}," parallel",[33,2545,2546],{"class":90}," for\n",[33,2548,2549,2552,2555,2558,2561,2563,2566,2569,2572,2575,2578,2581],{"class":35,"line":54},[33,2550,2551],{"class":57},"for",[33,2553,2554],{"class":61}," (",[33,2556,2557],{"class":57},"int",[33,2559,2560],{"class":61}," i ",[33,2562,1197],{"class":57},[33,2564,2565],{"class":194}," 0",[33,2567,2568],{"class":61},"; i ",[33,2570,2571],{"class":57},"\u003C",[33,2573,2574],{"class":194}," 100",[33,2576,2577],{"class":61},"; ",[33,2579,2580],{"class":57},"++",[33,2582,2583],{"class":61},"i) {\n",[33,2585,2586],{"class":35,"line":65},[33,2587,2588],{"class":39},"    \u002F\u002F parallel work\n",[33,2590,2591],{"class":35,"line":72},[33,2592,514],{"class":61},[140,2594,2596],{"id":2595},"sophus","Sophus",[12,2598,2599],{},"Sophus 是李群李代数库，在 SLAM、机器人位姿计算中常用。",[276,2601,654],{"id":2602},"安装-10",[12,2604,2605],{},"很多发行版仓库不一定提供合适版本，常见做法是从源码安装，或者由 ROS \u002F 项目依赖管理。",[12,2607,2608],{},"如果系统仓库提供，可以尝试搜索：",[24,2610,2612],{"className":660,"code":2611,"language":662,"meta":29,"style":29},"apt search sophus\ndnf search sophus\n",[16,2613,2614,2625],{"__ignoreMap":29},[33,2615,2616,2619,2622],{"class":35,"line":36},[33,2617,2618],{"class":90},"apt",[33,2620,2621],{"class":574}," search",[33,2623,2624],{"class":574}," sophus\n",[33,2626,2627,2630,2632],{"class":35,"line":43},[33,2628,2629],{"class":90},"dnf",[33,2631,2621],{"class":574},[33,2633,2624],{"class":574},[276,2635,702],{"id":2636},"cmake-写法-9",[12,2638,2639],{},"如果已经安装并提供 CMake config：",[24,2641,2643],{"className":26,"code":2642,"language":28,"meta":29,"style":29},"# ========================\n# Third-party dependencies\n# ========================\nfind_package(Sophus REQUIRED)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    Sophus::Sophus\n)\n",[16,2644,2645,2649,2653,2657,2664,2668,2678,2682,2687],{"__ignoreMap":29},[33,2646,2647],{"class":35,"line":36},[33,2648,40],{"class":39},[33,2650,2651],{"class":35,"line":43},[33,2652,46],{"class":39},[33,2654,2655],{"class":35,"line":49},[33,2656,40],{"class":39},[33,2658,2659,2661],{"class":35,"line":54},[33,2660,58],{"class":57},[33,2662,2663],{"class":61},"(Sophus REQUIRED)\n",[33,2665,2666],{"class":35,"line":65},[33,2667,69],{"emptyLinePlaceholder":68},[33,2669,2670,2672,2674,2676],{"class":35,"line":72},[33,2671,75],{"class":57},[33,2673,78],{"class":61},[33,2675,81],{"class":57},[33,2677,84],{"class":61},[33,2679,2680],{"class":35,"line":87},[33,2681,540],{"class":90},[33,2683,2684],{"class":35,"line":94},[33,2685,2686],{"class":61},"    Sophus::Sophus\n",[33,2688,2689],{"class":35,"line":100},[33,2690,103],{"class":61},[12,2692,2693],{},"Sophus 常依赖 Eigen。如果你的代码同时直接使用 Eigen，也可以显式写：",[24,2695,2697],{"className":26,"code":2696,"language":28,"meta":29,"style":29},"find_package(Eigen3 REQUIRED)\nfind_package(Sophus REQUIRED)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PUBLIC\n    Eigen3::Eigen\n  PRIVATE\n    Sophus::Sophus\n)\n",[16,2698,2699,2705,2711,2715,2725,2729,2733,2737,2741],{"__ignoreMap":29},[33,2700,2701,2703],{"class":35,"line":36},[33,2702,58],{"class":57},[33,2704,62],{"class":61},[33,2706,2707,2709],{"class":35,"line":43},[33,2708,58],{"class":57},[33,2710,2663],{"class":61},[33,2712,2713],{"class":35,"line":49},[33,2714,69],{"emptyLinePlaceholder":68},[33,2716,2717,2719,2721,2723],{"class":35,"line":54},[33,2718,75],{"class":57},[33,2720,78],{"class":61},[33,2722,81],{"class":57},[33,2724,84],{"class":61},[33,2726,2727],{"class":35,"line":65},[33,2728,91],{"class":90},[33,2730,2731],{"class":35,"line":72},[33,2732,97],{"class":61},[33,2734,2735],{"class":35,"line":87},[33,2736,540],{"class":90},[33,2738,2739],{"class":35,"line":94},[33,2740,2686],{"class":61},[33,2742,2743],{"class":35,"line":100},[33,2744,103],{"class":61},[140,2746,2747],{"id":2747},"常用依赖速查表",[210,2749,2750,2769],{},[213,2751,2752],{},[216,2753,2754,2757,2760,2763,2766],{},[219,2755,2756],{"align":221},"库",[219,2758,2759],{"align":221},"Ubuntu\u002FDebian",[219,2761,2762],{"align":221},"Fedora",[219,2764,2765],{"align":221},"CMake 查找",[219,2767,2768],{"align":221},"常用链接目标",[227,2770,2771,2794,2818,2842,2870,2894,2918,2941,2965,2984],{},[216,2772,2773,2775,2780,2785,2790],{},[232,2774,242],{"align":221},[232,2776,2777],{"align":221},[16,2778,2779],{},"libeigen3-dev",[232,2781,2782],{"align":221},[16,2783,2784],{},"eigen3-devel",[232,2786,2787],{"align":221},[16,2788,2789],{},"find_package(Eigen3 REQUIRED)",[232,2791,2792],{"align":221},[16,2793,128],{},[216,2795,2796,2798,2803,2808,2813],{},[232,2797,245],{"align":221},[232,2799,2800],{"align":221},[16,2801,2802],{},"libopencv-dev",[232,2804,2805],{"align":221},[16,2806,2807],{},"opencv-devel",[232,2809,2810],{"align":221},[16,2811,2812],{},"find_package(OpenCV REQUIRED COMPONENTS ...)",[232,2814,2815,2817],{"align":221},[16,2816,386],{}," 等",[216,2819,2820,2822,2827,2832,2837],{},[232,2821,1216],{"align":221},[232,2823,2824],{"align":221},[16,2825,2826],{},"libboost-all-dev",[232,2828,2829],{"align":221},[16,2830,2831],{},"boost-devel",[232,2833,2834],{"align":221},[16,2835,2836],{},"find_package(Boost REQUIRED COMPONENTS ...)",[232,2838,2839,2817],{"align":221},[16,2840,2841],{},"Boost::system",[216,2843,2844,2846,2851,2856,2861],{},[232,2845,1399],{"align":221},[232,2847,2848],{"align":221},[16,2849,2850],{},"libpcl-dev",[232,2852,2853],{"align":221},[16,2854,2855],{},"pcl-devel",[232,2857,2858],{"align":221},[16,2859,2860],{},"find_package(PCL REQUIRED COMPONENTS ...)",[232,2862,2863,2866,2867],{"align":221},[16,2864,2865],{},"${PCL_LIBRARIES}"," 或 ",[16,2868,2869],{},"PCL::common",[216,2871,2872,2874,2879,2884,2889],{},[232,2873,1694],{"align":221},[232,2875,2876],{"align":221},[16,2877,2878],{},"libfmt-dev",[232,2880,2881],{"align":221},[16,2882,2883],{},"fmt-devel",[232,2885,2886],{"align":221},[16,2887,2888],{},"find_package(fmt REQUIRED)",[232,2890,2891],{"align":221},[16,2892,2893],{},"fmt::fmt",[216,2895,2896,2898,2903,2908,2913],{},[232,2897,1848],{"align":221},[232,2899,2900],{"align":221},[16,2901,2902],{},"libspdlog-dev",[232,2904,2905],{"align":221},[16,2906,2907],{},"spdlog-devel",[232,2909,2910],{"align":221},[16,2911,2912],{},"find_package(spdlog REQUIRED)",[232,2914,2915],{"align":221},[16,2916,2917],{},"spdlog::spdlog",[216,2919,2920,2922,2927,2932,2937],{},[232,2921,1989],{"align":221},[232,2923,2924],{"align":221},[16,2925,2926],{},"libyaml-cpp-dev",[232,2928,2929],{"align":221},[16,2930,2931],{},"yaml-cpp-devel",[232,2933,2934],{"align":221},[16,2935,2936],{},"find_package(yaml-cpp REQUIRED)",[232,2938,2939],{"align":221},[16,2940,2096],{},[216,2942,2943,2945,2950,2955,2960],{},[232,2944,2100],{"align":221},[232,2946,2947],{"align":221},[16,2948,2949],{},"nlohmann-json3-dev",[232,2951,2952],{"align":221},[16,2953,2954],{},"json-devel",[232,2956,2957],{"align":221},[16,2958,2959],{},"find_package(nlohmann_json REQUIRED)",[232,2961,2962],{"align":221},[16,2963,2964],{},"nlohmann_json::nlohmann_json",[216,2966,2967,2969,2972,2974,2979],{},[232,2968,2248],{"align":221},[232,2970,2971],{"align":221},"通常无需单独安装",[232,2973,2971],{"align":221},[232,2975,2976],{"align":221},[16,2977,2978],{},"find_package(Threads REQUIRED)",[232,2980,2981],{"align":221},[16,2982,2983],{},"Threads::Threads",[216,2985,2986,2988,2993,2998,3003],{},[232,2987,2418],{"align":221},[232,2989,2990],{"align":221},[16,2991,2992],{},"libomp-dev",[232,2994,2995],{"align":221},[16,2996,2997],{},"libgomp",[232,2999,3000],{"align":221},[16,3001,3002],{},"find_package(OpenMP REQUIRED)",[232,3004,3005],{"align":221},[16,3006,3007],{},"OpenMP::OpenMP_CXX",[12,3009,3010],{},"不同发行版和版本的包名可能略有差异。如果安装失败，先用：",[24,3012,3014],{"className":660,"code":3013,"language":662,"meta":29,"style":29},"apt search \u003C关键字>\ndnf search \u003C关键字>\n",[16,3015,3016,3034],{"__ignoreMap":29},[33,3017,3018,3020,3022,3025,3028,3031],{"class":35,"line":36},[33,3019,2618],{"class":90},[33,3021,2621],{"class":574},[33,3023,3024],{"class":57}," \u003C",[33,3026,3027],{"class":574},"关键",[33,3029,3030],{"class":61},"字",[33,3032,3033],{"class":57},">\n",[33,3035,3036,3038,3040,3042,3044,3046],{"class":35,"line":43},[33,3037,2629],{"class":90},[33,3039,2621],{"class":574},[33,3041,3024],{"class":57},[33,3043,3027],{"class":574},[33,3045,3030],{"class":61},[33,3047,3033],{"class":57},[12,3049,3050],{},"确认包名。",[140,3052,3054],{"id":3053},"一个模块同时引入-eigen-和-opencv","一个模块同时引入 Eigen 和 OpenCV",[12,3056,3057,3058,3060],{},"例如 ",[16,3059,467],{}," 同时使用 Eigen 和 OpenCV：",[24,3062,3064],{"className":26,"code":3063,"language":28,"meta":29,"style":29},"# ========================\n# Third-party dependencies\n# ========================\nfind_package(Eigen3 REQUIRED)\nfind_package(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs)\n\ntarget_link_libraries(${PREFIX}_src_lib\n  PUBLIC\n    Eigen3::Eigen\n  PRIVATE\n    opencv_core\n    opencv_imgproc\n    opencv_imgcodecs\n)\n",[16,3065,3066,3070,3074,3078,3084,3091,3095,3105,3109,3113,3117,3121,3125,3129],{"__ignoreMap":29},[33,3067,3068],{"class":35,"line":36},[33,3069,40],{"class":39},[33,3071,3072],{"class":35,"line":43},[33,3073,46],{"class":39},[33,3075,3076],{"class":35,"line":49},[33,3077,40],{"class":39},[33,3079,3080,3082],{"class":35,"line":54},[33,3081,58],{"class":57},[33,3083,62],{"class":61},[33,3085,3086,3088],{"class":35,"line":65},[33,3087,58],{"class":57},[33,3089,3090],{"class":61},"(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs)\n",[33,3092,3093],{"class":35,"line":72},[33,3094,69],{"emptyLinePlaceholder":68},[33,3096,3097,3099,3101,3103],{"class":35,"line":87},[33,3098,75],{"class":57},[33,3100,78],{"class":61},[33,3102,81],{"class":57},[33,3104,84],{"class":61},[33,3106,3107],{"class":35,"line":94},[33,3108,91],{"class":90},[33,3110,3111],{"class":35,"line":100},[33,3112,97],{"class":61},[33,3114,3115],{"class":35,"line":1049},[33,3116,540],{"class":90},[33,3118,3119],{"class":35,"line":1055},[33,3120,1041],{"class":61},[33,3122,3123],{"class":35,"line":1061},[33,3124,1046],{"class":61},[33,3126,3127],{"class":35,"line":1602},[33,3128,1052],{"class":61},[33,3130,3131],{"class":35,"line":1608},[33,3132,103],{"class":61},[12,3134,3135,3136,520],{},"如果头文件不暴露 Eigen 类型，也可以把 Eigen 改成 ",[16,3137,413],{},[24,3139,3141],{"className":26,"code":3140,"language":28,"meta":29,"style":29},"target_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    Eigen3::Eigen\n    opencv_core\n    opencv_imgproc\n    opencv_imgcodecs\n)\n",[16,3142,3143,3153,3157,3161,3165,3169,3173],{"__ignoreMap":29},[33,3144,3145,3147,3149,3151],{"class":35,"line":36},[33,3146,75],{"class":57},[33,3148,78],{"class":61},[33,3150,81],{"class":57},[33,3152,84],{"class":61},[33,3154,3155],{"class":35,"line":43},[33,3156,540],{"class":90},[33,3158,3159],{"class":35,"line":49},[33,3160,97],{"class":61},[33,3162,3163],{"class":35,"line":54},[33,3164,1041],{"class":61},[33,3166,3167],{"class":35,"line":65},[33,3168,1046],{"class":61},[33,3170,3171],{"class":35,"line":72},[33,3172,1052],{"class":61},[33,3174,3175],{"class":35,"line":87},[33,3176,103],{"class":61},[140,3178,3179],{"id":3179},"不推荐的写法",[276,3181,3183],{"id":3182},"不推荐顶层集中查找所有库","不推荐：顶层集中查找所有库",[24,3185,3187],{"className":26,"code":3186,"language":28,"meta":29,"style":29},"# 顶层 CMakeLists.txt\nfind_package(Eigen3 REQUIRED)\nfind_package(OpenCV REQUIRED)\nfind_package(PCL REQUIRED)\n",[16,3188,3189,3194,3200,3206],{"__ignoreMap":29},[33,3190,3191],{"class":35,"line":36},[33,3192,3193],{"class":39},"# 顶层 CMakeLists.txt\n",[33,3195,3196,3198],{"class":35,"line":43},[33,3197,58],{"class":57},[33,3199,62],{"class":61},[33,3201,3202,3204],{"class":35,"line":49},[33,3203,58],{"class":57},[33,3205,184],{"class":61},[33,3207,3208,3210],{"class":35,"line":54},[33,3209,58],{"class":57},[33,3211,3212],{"class":61},"(PCL REQUIRED)\n",[12,3214,3215],{},"问题：",[108,3217,3218,3221,3224,3227],{},[111,3219,3220],{},"顶层越来越乱。",[111,3222,3223],{},"不知道哪个模块真正用了哪个库。",[111,3225,3226],{},"删除模块时容易漏删依赖。",[111,3228,3229],{},"新人阅读工程时依赖关系不清楚。",[276,3231,3233],{"id":3232},"不推荐全局-include","不推荐：全局 include",[24,3235,3237],{"className":26,"code":3236,"language":28,"meta":29,"style":29},"include_directories(${OpenCV_INCLUDE_DIRS})\nlink_libraries(${OpenCV_LIBS})\n",[16,3238,3239,3251],{"__ignoreMap":29},[33,3240,3241,3244,3246,3249],{"class":35,"line":36},[33,3242,3243],{"class":57},"include_directories",[33,3245,78],{"class":61},[33,3247,3248],{"class":57},"${OpenCV_INCLUDE_DIRS}",[33,3250,103],{"class":61},[33,3252,3253,3256,3258,3261],{"class":35,"line":43},[33,3254,3255],{"class":57},"link_libraries",[33,3257,78],{"class":61},[33,3259,3260],{"class":57},"${OpenCV_LIBS}",[33,3262,103],{"class":61},[12,3264,3215],{},[108,3266,3267,3270,3273],{},[111,3268,3269],{},"影响所有 target。",[111,3271,3272],{},"依赖关系不明确。",[111,3274,3275],{},"可能引入意外的 include 顺序问题。",[12,3277,3278],{},"现代 CMake 推荐：",[24,3280,3282],{"className":26,"code":3281,"language":28,"meta":29,"style":29},"target_link_libraries(my_target\n  PRIVATE\n    opencv_core\n)\n",[16,3283,3284,3291,3295,3299],{"__ignoreMap":29},[33,3285,3286,3288],{"class":35,"line":36},[33,3287,75],{"class":57},[33,3289,3290],{"class":61},"(my_target\n",[33,3292,3293],{"class":35,"line":43},[33,3294,540],{"class":90},[33,3296,3297],{"class":35,"line":49},[33,3298,1041],{"class":61},[33,3300,3301],{"class":35,"line":54},[33,3302,103],{"class":61},[12,3304,3305],{},"如果库提供 imported target，include 路径和链接库会自动跟着 target 传播。",[140,3307,3309,3310,3312],{"id":3308},"排查-find_package-找不到库","排查 ",[16,3311,58],{}," 找不到库",[276,3314,3316],{"id":3315},"第一步确认系统包是否安装","第一步：确认系统包是否安装",[24,3318,3320],{"className":660,"code":3319,"language":662,"meta":29,"style":29},"dpkg -l | grep eigen\nrpm -qa | grep eigen\n",[16,3321,3322,3339],{"__ignoreMap":29},[33,3323,3324,3327,3330,3333,3336],{"class":35,"line":36},[33,3325,3326],{"class":90},"dpkg",[33,3328,3329],{"class":194}," -l",[33,3331,3332],{"class":57}," |",[33,3334,3335],{"class":90}," grep",[33,3337,3338],{"class":574}," eigen\n",[33,3340,3341,3344,3347,3349,3351],{"class":35,"line":43},[33,3342,3343],{"class":90},"rpm",[33,3345,3346],{"class":194}," -qa",[33,3348,3332],{"class":57},[33,3350,3335],{"class":90},[33,3352,3338],{"class":574},[276,3354,3356],{"id":3355},"第二步确认-cmake-能看到-config-文件","第二步：确认 CMake 能看到 config 文件",[12,3358,3359],{},"常见文件名：",[24,3361,3366],{"className":3362,"code":3364,"language":3365,"meta":29},[3363],"language-text","Eigen3Config.cmake\nOpenCVConfig.cmake\nPCLConfig.cmake\nfmtConfig.cmake\n","text",[16,3367,3364],{"__ignoreMap":29},[276,3369,3371],{"id":3370},"第三步手动指定搜索路径","第三步：手动指定搜索路径",[12,3373,3374],{},"如果库安装在非标准目录，可以在 configure 时添加：",[24,3376,3378],{"className":660,"code":3377,"language":662,"meta":29,"style":29},"cmake --preset linux-debug -DCMAKE_PREFIX_PATH=\u002Fopt\u002Fsome_library\n",[16,3379,3380],{"__ignoreMap":29},[33,3381,3382,3384,3387,3390],{"class":35,"line":36},[33,3383,28],{"class":90},[33,3385,3386],{"class":194}," --preset",[33,3388,3389],{"class":574}," linux-debug",[33,3391,3392],{"class":194}," -DCMAKE_PREFIX_PATH=\u002Fopt\u002Fsome_library\n",[12,3394,3395],{},"或在 preset 中添加：",[24,3397,3401],{"className":3398,"code":3399,"language":3400,"meta":29,"style":29},"language-json shiki shiki-themes github-light github-dark","\"CMAKE_PREFIX_PATH\": \"\u002Fopt\u002Fsome_library\"\n","json",[16,3402,3403],{"__ignoreMap":29},[33,3404,3405,3408,3411],{"class":35,"line":36},[33,3406,3407],{"class":574},"\"CMAKE_PREFIX_PATH\"",[33,3409,3410],{"class":61},": ",[33,3412,3413],{"class":574},"\"\u002Fopt\u002Fsome_library\"\n",[12,3415,3416],{},"多个路径可以用分号：",[24,3418,3420],{"className":3398,"code":3419,"language":3400,"meta":29,"style":29},"\"CMAKE_PREFIX_PATH\": \"\u002Fopt\u002Flib_a;\u002Fopt\u002Flib_b\"\n",[16,3421,3422],{"__ignoreMap":29},[33,3423,3424,3426,3428],{"class":35,"line":36},[33,3425,3407],{"class":574},[33,3427,3410],{"class":61},[33,3429,3430],{"class":574},"\"\u002Fopt\u002Flib_a;\u002Fopt\u002Flib_b\"\n",[276,3432,3434],{"id":3433},"第四步查看-cmake-报错信息","第四步：查看 CMake 报错信息",[12,3436,3437],{},"CMake 通常会告诉你缺少哪个 config 文件，例如：",[24,3439,3442],{"className":3440,"code":3441,"language":3365,"meta":29},[3363],"Could not find a package configuration file provided by \"OpenCV\"\n",[16,3443,3441],{"__ignoreMap":29},[12,3445,3446],{},"这种情况优先检查：",[108,3448,3449,3452,3455],{},[111,3450,3451],{},"开发包是否安装。",[111,3453,3454],{},"包名是否正确。",[111,3456,3457],{},"是否安装到了非标准路径。",[3459,3460,3461],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":29,"searchDepth":43,"depth":43,"links":3463},[3464,3469,3471,3477,3484,3489,3494,3499,3504,3508,3513,3518,3523,3527,3528,3529,3533],{"id":142,"depth":43,"text":3465,"children":3466},"find_package 基本语法",[3467,3468],{"id":278,"depth":49,"text":261},{"id":356,"depth":49,"text":271},{"id":402,"depth":43,"text":3470},"target_link_libraries 里的依赖可见性",{"id":648,"depth":43,"text":242,"children":3472},[3473,3474,3475,3476],{"id":654,"depth":49,"text":654},{"id":701,"depth":49,"text":702},{"id":753,"depth":49,"text":754},{"id":802,"depth":49,"text":802},{"id":848,"depth":43,"text":849,"children":3478},[3479,3480,3481,3482,3483],{"id":855,"depth":49,"text":654},{"id":894,"depth":49,"text":894},{"id":993,"depth":49,"text":994},{"id":1125,"depth":49,"text":1126},{"id":1170,"depth":49,"text":754},{"id":1215,"depth":43,"text":1216,"children":3485},[3486,3487,3488],{"id":1229,"depth":49,"text":654},{"id":1290,"depth":49,"text":702},{"id":1355,"depth":49,"text":754},{"id":1398,"depth":43,"text":1399,"children":3490},[3491,3492,3493],{"id":1405,"depth":49,"text":654},{"id":1444,"depth":49,"text":894},{"id":1529,"depth":49,"text":702},{"id":1694,"depth":43,"text":1694,"children":3495},[3496,3497,3498],{"id":1706,"depth":49,"text":654},{"id":1745,"depth":49,"text":702},{"id":1799,"depth":49,"text":754},{"id":1848,"depth":43,"text":1848,"children":3500},[3501,3502,3503],{"id":1856,"depth":49,"text":654},{"id":1895,"depth":49,"text":702},{"id":1949,"depth":49,"text":754},{"id":1989,"depth":43,"text":1989,"children":3505},[3506,3507],{"id":1997,"depth":49,"text":654},{"id":2036,"depth":49,"text":702},{"id":2100,"depth":43,"text":2100,"children":3509},[3510,3511,3512],{"id":2108,"depth":49,"text":654},{"id":2147,"depth":49,"text":702},{"id":2201,"depth":49,"text":754},{"id":2247,"depth":43,"text":2248,"children":3514},[3515,3516,3517],{"id":2257,"depth":49,"text":654},{"id":2308,"depth":49,"text":702},{"id":2362,"depth":49,"text":754},{"id":2417,"depth":43,"text":2418,"children":3519},[3520,3521,3522],{"id":2424,"depth":49,"text":654},{"id":2463,"depth":49,"text":702},{"id":2517,"depth":49,"text":754},{"id":2595,"depth":43,"text":2596,"children":3524},[3525,3526],{"id":2602,"depth":49,"text":654},{"id":2636,"depth":49,"text":702},{"id":2747,"depth":43,"text":2747},{"id":3053,"depth":43,"text":3054},{"id":3179,"depth":43,"text":3179,"children":3530},[3531,3532],{"id":3182,"depth":49,"text":3183},{"id":3232,"depth":49,"text":3233},{"id":3308,"depth":43,"text":3534,"children":3535},"排查 find_package 找不到库",[3536,3537,3538,3539],{"id":3315,"depth":49,"text":3316},{"id":3355,"depth":49,"text":3356},{"id":3370,"depth":49,"text":3371},{"id":3433,"depth":49,"text":3434},"2200-0400","2023-10-05","本节专门讲第三方库如何安装、如何在 CMake 中查找、如何放到模板的 Third-party dependencies 区块里。","2023-10-05-cplusplus-jiao-xue","\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md",false,{},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa",{"title":5,"description":3542},"wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","gow4MapQRdlVr5uxUAp80MxEpcTxsluxkgR63Qb9dQ4",[3554,3561,3567,3573,3579,3585,3591,3597,3603,3609,3615,3621,3627,3633,3639,3645,3651,3657,3663,3669,3675,3681,3687,3693,3699,3705,3711,3717,3723,3729,3735,3741,3747,3753,3759,3765,3771,3777,3783,3789,3794,3800,3806,3812,3818,3824,3830,3836,3842,3848,3854,3860,3866,3872,3878,3884,3890,3896,3902,3908,3914,3920,3926,3932,3938,3944,3950,3956,3962,3968,3973,3979,3985,3991,3997,4003,4009,4015,4021,4027,4033,4039,4045,4051,4057,4063,4069,4075,4081,4083,4089,4095],{"path":3555,"stem":3556,"title":3557,"authors":3558,"date":3541,"chapterOrder":3559,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++开发环境搭建与测试",[7],"0100",0,{"path":3562,"stem":3563,"title":3564,"authors":3565,"date":3541,"chapterOrder":3566,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识",[7],"0200",{"path":3568,"stem":3569,"title":3570,"authors":3571,"date":3541,"chapterOrder":3572,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","数据类型与数据存放",[7],"0300",{"path":3574,"stem":3575,"title":3576,"authors":3577,"date":3541,"chapterOrder":3578,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出",[7],"0400",{"path":3580,"stem":3581,"title":3582,"authors":3583,"date":3541,"chapterOrder":3584,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符",[7],"0500",{"path":3586,"stem":3587,"title":3588,"authors":3589,"date":3541,"chapterOrder":3590,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构",[7],"0600",{"path":3592,"stem":3593,"title":3594,"authors":3595,"date":3541,"chapterOrder":3596,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组",[7],"0700",{"path":3598,"stem":3599,"title":3600,"authors":3601,"date":3541,"chapterOrder":3602,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件",[7],"0800",{"path":3604,"stem":3605,"title":3606,"authors":3607,"date":3541,"chapterOrder":3608,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针",[7],"0900",{"path":3610,"stem":3611,"title":3612,"authors":3613,"date":3541,"chapterOrder":3614,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体",[7],"1000",{"path":3616,"stem":3617,"title":3618,"authors":3619,"date":3541,"chapterOrder":3620,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","内存分区与生命周期",[7],"1100",{"path":3622,"stem":3623,"title":3624,"authors":3625,"date":3541,"chapterOrder":3626,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用",[7],"1200",{"path":3628,"stem":3629,"title":3630,"authors":3631,"date":3541,"chapterOrder":3632,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高","函数提高",[7],"1300",{"path":3634,"stem":3635,"title":3636,"authors":3637,"date":3541,"chapterOrder":3638,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1350-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1350-命名空间","命名空间",[7],"1350",{"path":3640,"stem":3641,"title":3642,"authors":3643,"date":3541,"chapterOrder":3644,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装",[7],"1400-0100",{"path":3646,"stem":3647,"title":3648,"authors":3649,"date":3541,"chapterOrder":3650,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","对象初始化和清理",[7],"1400-0200",{"path":3652,"stem":3653,"title":3654,"authors":3655,"date":3541,"chapterOrder":3656,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","对象模型与this指针",[7],"1400-0300",{"path":3658,"stem":3659,"title":3660,"authors":3661,"date":3541,"chapterOrder":3662,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元与运算符重载",[7],"1400-0400",{"path":3664,"stem":3665,"title":3666,"authors":3667,"date":3541,"chapterOrder":3668,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承",[7],"1400-0500",{"path":3670,"stem":3671,"title":3672,"authors":3673,"date":3541,"chapterOrder":3674,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态",[7],"1400-0600",{"path":3676,"stem":3677,"title":3678,"authors":3679,"date":3541,"chapterOrder":3680,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象",[7],"1400",{"path":3682,"stem":3683,"title":3684,"authors":3685,"date":3541,"chapterOrder":3686,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针","函数指针",[7],"1450",{"path":3688,"stem":3689,"title":3690,"authors":3691,"date":3541,"chapterOrder":3692,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作",[7],"1500",{"path":3694,"stem":3695,"title":3696,"authors":3697,"date":3541,"chapterOrder":3698,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理",[7],"1600",{"path":3700,"stem":3701,"title":3702,"authors":3703,"date":3541,"chapterOrder":3704,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板",[7],"1700",{"path":3706,"stem":3707,"title":3708,"authors":3709,"date":3541,"chapterOrder":3710,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识",[7],"1800-0100",{"path":3712,"stem":3713,"title":3714,"authors":3715,"date":3541,"chapterOrder":3716,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array",[7],"1800-0200",{"path":3718,"stem":3719,"title":3720,"authors":3721,"date":3541,"chapterOrder":3722,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器",[7],"1800-0300",{"path":3724,"stem":3725,"title":3726,"authors":3727,"date":3541,"chapterOrder":3728,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器",[7],"1800-0400",{"path":3730,"stem":3731,"title":3732,"authors":3733,"date":3541,"chapterOrder":3734,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器",[7],"1800-0500",{"path":3736,"stem":3737,"title":3738,"authors":3739,"date":3541,"chapterOrder":3740,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器",[7],"1800-0600",{"path":3742,"stem":3743,"title":3744,"authors":3745,"date":3541,"chapterOrder":3746,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器",[7],"1800-0700",{"path":3748,"stem":3749,"title":3750,"authors":3751,"date":3541,"chapterOrder":3752,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器",[7],"1800-0800",{"path":3754,"stem":3755,"title":3756,"authors":3757,"date":3541,"chapterOrder":3758,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器",[7],"1800-0900",{"path":3760,"stem":3761,"title":3762,"authors":3763,"date":3541,"chapterOrder":3764,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器",[7],"1800-1000",{"path":3766,"stem":3767,"title":3768,"authors":3769,"date":3541,"chapterOrder":3770,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函数对象与谓词",[7],"1800-1100",{"path":3772,"stem":3773,"title":3774,"authors":3775,"date":3541,"chapterOrder":3776,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法",[7],"1800-1200",{"path":3778,"stem":3779,"title":3780,"authors":3781,"date":3541,"chapterOrder":3782,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程",[7],"1800",{"path":3784,"stem":3785,"title":3786,"authors":3787,"date":3541,"chapterOrder":3788,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换",[7],"1900",{"path":3790,"stem":3791,"title":1820,"authors":3792,"date":3541,"chapterOrder":3793,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto",[7],"2000-0100",{"path":3795,"stem":3796,"title":3797,"authors":3798,"date":3541,"chapterOrder":3799,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr",[7],"2000-0200",{"path":3801,"stem":3802,"title":3803,"authors":3804,"date":3541,"chapterOrder":3805,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using",[7],"2000-0300",{"path":3807,"stem":3808,"title":3809,"authors":3810,"date":3541,"chapterOrder":3811,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class",[7],"2000-0400",{"path":3813,"stem":3814,"title":3815,"authors":3816,"date":3541,"chapterOrder":3817,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","范围 for 循环",[7],"2000-0500",{"path":3819,"stem":3820,"title":3821,"authors":3822,"date":3541,"chapterOrder":3823,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","结构化绑定",[7],"2000-0600",{"path":3825,"stem":3826,"title":3827,"authors":3828,"date":3541,"chapterOrder":3829,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr",[7],"2000-0700",{"path":3831,"stem":3832,"title":3833,"authors":3834,"date":3541,"chapterOrder":3835,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII",[7],"2000-0800",{"path":3837,"stem":3838,"title":3839,"authors":3840,"date":3541,"chapterOrder":3841,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针",[7],"2000-0900",{"path":3843,"stem":3844,"title":3845,"authors":3846,"date":3541,"chapterOrder":3847,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移动语义",[7],"2000-1000",{"path":3849,"stem":3850,"title":3851,"authors":3852,"date":3541,"chapterOrder":3853,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表达式",[7],"2000-1100",{"path":3855,"stem":3856,"title":3857,"authors":3858,"date":3541,"chapterOrder":3859,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function",[7],"2000-1200",{"path":3861,"stem":3862,"title":3863,"authors":3864,"date":3541,"chapterOrder":3865,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind",[7],"2000-1300",{"path":3867,"stem":3868,"title":3869,"authors":3870,"date":3541,"chapterOrder":3871,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional",[7],"2000-1400",{"path":3873,"stem":3874,"title":3875,"authors":3876,"date":3541,"chapterOrder":3877,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant",[7],"2000-1500",{"path":3879,"stem":3880,"title":3881,"authors":3882,"date":3541,"chapterOrder":3883,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span",[7],"2000-1600",{"path":3885,"stem":3886,"title":3887,"authors":3888,"date":3541,"chapterOrder":3889,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print",[7],"2000-1700",{"path":3891,"stem":3892,"title":3893,"authors":3894,"date":3541,"chapterOrder":3895,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono",[7],"2000-1800",{"path":3897,"stem":3898,"title":3899,"authors":3900,"date":3541,"chapterOrder":3901,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-bing-fa-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-并发是什么","并发是什么",[7],"2000-1900-0100",{"path":3903,"stem":3904,"title":3905,"authors":3906,"date":3541,"chapterOrder":3907,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-bing-xing-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-并行是什么","并行是什么",[7],"2000-1900-0200",{"path":3909,"stem":3910,"title":3911,"authors":3912,"date":3541,"chapterOrder":3913,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-xie-cheng-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-协程是什么","协程是什么",[7],"2000-1900-0300",{"path":3915,"stem":3916,"title":3917,"authors":3918,"date":3541,"chapterOrder":3919,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1000-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1000-并发编程","并发编程",[7],"2000-1900-1000",{"path":3921,"stem":3922,"title":3923,"authors":3924,"date":3541,"chapterOrder":3925,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1100-std-thread","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1100-std-thread","std::thread",[7],"2000-1900-1100",{"path":3927,"stem":3928,"title":3929,"authors":3930,"date":3541,"chapterOrder":3931,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1200-mutex-lock-guard","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1200-mutex-lock-guard","mutex 与 RAII 锁",[7],"2000-1900-1200",{"path":3933,"stem":3934,"title":3935,"authors":3936,"date":3541,"chapterOrder":3937,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1300-std-atomic","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1300-std-atomic","std::atomic",[7],"2000-1900-1300",{"path":3939,"stem":3940,"title":3941,"authors":3942,"date":3541,"chapterOrder":3943,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1400-condition-variable","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1400-condition-variable","condition_variable",[7],"2000-1900-1400",{"path":3945,"stem":3946,"title":3947,"authors":3948,"date":3541,"chapterOrder":3949,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1500-future-async-promise","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1500-future-async-promise","future、async、promise 与 packaged_task",[7],"2000-1900-1500",{"path":3951,"stem":3952,"title":3953,"authors":3954,"date":3541,"chapterOrder":3955,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1600-jthread-stop-token","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1600-jthread-stop-token","jthread 与 stop_token",[7],"2000-1900-1600",{"path":3957,"stem":3958,"title":3959,"authors":3960,"date":3541,"chapterOrder":3961,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1700-semaphore-latch-barrier","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1700-semaphore-latch-barrier","semaphore、latch 与 barrier",[7],"2000-1900-1700",{"path":3963,"stem":3964,"title":3965,"authors":3966,"date":3541,"chapterOrder":3967,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bing-xing-yu-xie-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发并行与协程","并发、并行与协程",[7],"2000-1900",{"path":3969,"stem":3970,"title":1394,"authors":3971,"date":3541,"chapterOrder":3972,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem",[7],"2000-2000",{"path":3974,"stem":3975,"title":3976,"authors":3977,"date":3541,"chapterOrder":3978,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 简介",[7],"2000-2100",{"path":3980,"stem":3981,"title":3982,"authors":3983,"date":3541,"chapterOrder":3984,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++",[7],"2000",{"path":3986,"stem":3987,"title":3988,"authors":3989,"date":3541,"chapterOrder":3990,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定时器与异步 IO",[7],"2100-0100-0100",{"path":3992,"stem":3993,"title":3994,"authors":3995,"date":3541,"chapterOrder":3996,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基础",[7],"2100-0100-0200",{"path":3998,"stem":3999,"title":4000,"authors":4001,"date":3541,"chapterOrder":4002,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信教学",[7],"2100-0100-0300",{"path":4004,"stem":4005,"title":4006,"authors":4007,"date":3541,"chapterOrder":4008,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0350-chuan-kou-tong-xin-chuan-kou-bao-xie-yi-shi-li","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0350-串口通信串口包协议实例","串口通信串口包协议实例",[7],"2100-0100-0350",{"path":4010,"stem":4011,"title":4012,"authors":4013,"date":3541,"chapterOrder":4014,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信",[7],"2100-0100-0400",{"path":4016,"stem":4017,"title":4018,"authors":4019,"date":3541,"chapterOrder":4020,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信",[7],"2100-0100-0500",{"path":4022,"stem":4023,"title":4024,"authors":4025,"date":3541,"chapterOrder":4026,"chapterDepth":43,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成",[7],"2100-0100-0600",{"path":4028,"stem":4029,"title":4030,"authors":4031,"date":3541,"chapterOrder":4032,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio异步IO库",[7],"2100-0100",{"path":4034,"stem":4035,"title":4036,"authors":4037,"date":3541,"chapterOrder":4038,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen线性代数库",[7],"2100-0200",{"path":4040,"stem":4041,"title":4042,"authors":4043,"date":3541,"chapterOrder":4044,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV计算机视觉库",[7],"2100-0300",{"path":4046,"stem":4047,"title":4048,"authors":4049,"date":3541,"chapterOrder":4050,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL点云库",[7],"2100-0400",{"path":4052,"stem":4053,"title":4054,"authors":4055,"date":3541,"chapterOrder":4056,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代数库",[7],"2100-0500",{"path":4058,"stem":4059,"title":4060,"authors":4061,"date":3541,"chapterOrder":4062,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习",[7],"2100",{"path":4064,"stem":4065,"title":4066,"authors":4067,"date":3541,"chapterOrder":4068,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets与构建安装",[7],"2200-0100",{"path":4070,"stem":4071,"title":4072,"authors":4073,"date":3541,"chapterOrder":4074,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","顶层CMake与公共编译选项",[7],"2200-0200",{"path":4076,"stem":4077,"title":4078,"authors":4079,"date":3541,"chapterOrder":4080,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src与lib模块CMake详解",[7],"2200-0300",{"path":3549,"stem":3551,"title":5,"authors":4082,"date":3541,"chapterOrder":3540,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},[7],{"path":4084,"stem":4085,"title":4086,"authors":4087,"date":3541,"chapterOrder":4088,"chapterDepth":36,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板扩展与常见问题",[7],"2200-0500",{"path":4090,"stem":4091,"title":4092,"authors":4093,"date":3541,"chapterOrder":4094,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":3547},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板",[7],"2200",{"path":3544,"stem":4096,"title":4097,"authors":4098,"date":3541,"chapterOrder":4099,"chapterDepth":3560,"docKey":3543,"docRoot":3544,"docTitle":3545,"isWikiDoc":68,"isWikiIndex":68},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",[7],null,[4101,4103,4106,4109],{"name":7,"image":4102},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":4104,"image":4105},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":4107,"image":4108},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":4110,"image":4111},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431900548]