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