[{"data":1,"prerenderedAt":4808},["ShallowReactive",2],{"wiki-page-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa":3,"wiki-doc-items-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa":4388,"language-switcher-data-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa":4792,"wiki-i18n-paths-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa":4807},{"id":4,"title":5,"body":6,"canonicalPath":4369,"chapterDepth":34,"chapterOrder":4370,"date":4371,"description":4372,"docI18nKey":4373,"docKey":4374,"docRoot":4375,"docTitle":4376,"extension":4377,"i18nKey":4378,"isBlogPost":4379,"isWikiDoc":66,"isWikiIndex":4379,"layout":4380,"legacyPath":4380,"locale":4381,"localeSlug":4382,"meta":4383,"navigation":66,"path":4369,"seo":4384,"sourcePath":4385,"sourceStem":4378,"stem":4386,"wikiDepth":34,"__hash__":4387},"content\u002F_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法.md","How to write third-party library dependencies",{"type":7,"value":8,"toc":4281},"minimark",[9,18,21,102,105,137,144,162,165,204,207,274,280,291,294,297,309,312,347,353,358,361,364,376,379,396,399,406,418,463,470,516,522,550,553,609,615,642,648,651,654,658,661,682,685,702,706,754,758,802,806,848,852,855,858,860,876,878,894,898,994,998,1067,1073,1116,1126,1130,1168,1171,1174,1216,1220,1229,1232,1234,1250,1252,1268,1271,1290,1293,1355,1358,1391,1398,1402,1405,1408,1410,1426,1428,1444,1447,1528,1531,1645,1648,1686,1692,1695,1704,1707,1709,1725,1727,1743,1746,1797,1800,1846,1849,1854,1857,1859,1875,1877,1893,1896,1947,1950,1987,1990,1995,1998,2000,2016,2018,2034,2037,2088,2098,2101,2106,2109,2111,2127,2129,2145,2148,2199,2202,2245,2249,2255,2258,2261,2264,2266,2282,2284,2306,2309,2360,2363,2415,2419,2422,2425,2427,2443,2445,2461,2464,2515,2518,2593,2597,2600,2603,2606,2609,2634,2637,2640,2691,2694,2745,2749,3009,3012,3049,3052,3056,3059,3067,3129,3136,3142,3263,3270,3276,3649,3656,3659,3806,3812,3872,3875,3881,3953,3958,3997,4001,4005,4034,4037,4051,4055,4083,4085,4096,4099,4123,4126,4132,4136,4172,4176,4179,4187,4191,4194,4212,4215,4233,4236,4250,4254,4257,4263,4266,4277],[10,11,12,13,17],"p",{},"This section focuses specifically on how to install third-party libraries, how to find them in CMake, and how to place them in the template's ",[14,15,16],"code",{},"Third-party dependencies"," section.",[10,19,20],{},"The principle of this template is:",[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],{},"That is: if the communication parameters (like baud rate) set in the microcontroller program are not consistent with those configured in the serial port software on the PC, the communication between the microcontroller and the computer will fail.",[106,107,108,115,121,131],"ol",{},[109,110,111,112,114],"li",{},"Who uses third-party libraries, writes ",[14,113,56],{},".",[109,116,117,118,120],{},"Third-party dependencies are centralized in the ",[14,119,16],{}," section of this module.",[109,122,123,124,127,128,114],{},"Prioritize linking modern CMake targets, such as ",[14,125,126],{},"Eigen3::Eigen"," and ",[14,129,130],{},"OpenCV::opencv_core",[109,132,133,134,114],{},"Don't dump all third-party libraries at the top level ",[14,135,136],{},"CMakeLists.txt",[138,139,141,143],"h2",{"id":140},"find_package-basic-grammar",[14,142,56],{}," Basic Grammar",[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],{},"common practice",[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],{},"Parameter Description:",[208,209,210,224],"table",{},[211,212,213],"thead",{},[214,215,216,221],"tr",{},[217,218,220],"th",{"align":219},"left","parameter",[217,222,223],{"align":219},"effect",[225,226,227,245,254,264],"tbody",{},[214,228,229,235],{},[230,231,232],"td",{"align":219},[14,233,234],{},"\u003CPackageName>",[230,236,237,238,241,242],{"align":219},"Package name, such as ",[14,239,240],{},"Eigen3",", ",[14,243,244],{},"OpenCV",[214,246,247,251],{},[230,248,249],{"align":219},[14,250,158],{},[230,252,253],{"align":219},"Minimum required version or exact version",[214,255,256,261],{},[230,257,258],{"align":219},[14,259,260],{},"REQUIRED",[230,262,263],{"align":219},"report an error if not found",[214,265,266,271],{},[230,267,268],{"align":219},[14,269,270],{},"COMPONENTS",[230,272,273],{"align":219},"Only search for certain components",[275,276,278],"h3",{"id":277},"required",[14,279,260],{},[22,281,283],{"className":24,"code":282,"language":26,"meta":27,"style":27},"find_package(Eigen3 REQUIRED)\n",[14,284,285],{"__ignoreMap":27},[31,286,287,289],{"class":33,"line":34},[31,288,56],{"class":55},[31,290,60],{"class":59},[10,292,293],{},"If Eigen is not found, the CMake configuration stage will fail immediately.",[10,295,296],{},"If I don't write",[22,298,300],{"className":24,"code":299,"language":26,"meta":27,"style":27},"find_package(Eigen3)\n",[14,301,302],{"__ignoreMap":27},[31,303,304,306],{"class":33,"line":34},[31,305,56],{"class":55},[31,307,308],{"class":59},"(Eigen3)\n",[10,310,311],{},"then you need to judge for yourself:",[22,313,315],{"className":24,"code":314,"language":26,"meta":27,"style":27},"if(Eigen3_FOUND)\n  target_link_libraries(my_target PUBLIC Eigen3::Eigen)\nendif()\n",[14,316,317,325,339],{"__ignoreMap":27},[31,318,319,322],{"class":33,"line":34},[31,320,321],{"class":55},"if",[31,323,324],{"class":59},"(Eigen3_FOUND)\n",[31,326,327,330,333,336],{"class":33,"line":41},[31,328,329],{"class":55},"  target_link_libraries",[31,331,332],{"class":59},"(my_target ",[31,334,335],{"class":88},"PUBLIC",[31,337,338],{"class":59}," Eigen3::Eigen)\n",[31,340,341,344],{"class":33,"line":47},[31,342,343],{"class":55},"endif",[31,345,346],{"class":59},"()\n",[10,348,349,350,352],{},"Engineering templates commonly contain ",[14,351,260],{}," because when dependencies are missing, it's better to fail early.",[275,354,356],{"id":355},"components",[14,357,270],{},[10,359,360],{},"Libraries such as OpenCV, Boost, and PCL usually feature multiple modules.",[10,362,363],{},"For example:",[22,365,367],{"className":24,"code":366,"language":26,"meta":27,"style":27},"find_package(OpenCV REQUIRED COMPONENTS core imgproc highgui)\n",[14,368,369],{"__ignoreMap":27},[31,370,371,373],{"class":33,"line":34},[31,372,56],{"class":55},[31,374,375],{"class":59},"(OpenCV REQUIRED COMPONENTS core imgproc highgui)\n",[10,377,378],{},"indicates only:",[106,380,381,386,391],{},[109,382,383],{},[14,384,385],{},"opencv_core",[109,387,388],{},[14,389,390],{},"opencv_imgproc",[109,392,393],{},[14,394,395],{},"opencv_highgui",[10,397,398],{},"This is clearer than importing all of OpenCV directly.",[138,400,402,403,405],{"id":401},"in-target_link_libraries-dependency-visibility","In ",[14,404,73],{},", dependency visibility",[10,407,408,409,241,411,414,415,114],{},"When linking third-party libraries, also consider ",[14,410,335],{},[14,412,413],{},"PRIVATE",", and ",[14,416,417],{},"INTERFACE",[208,419,420,430],{},[211,421,422],{},[214,423,424,427],{},[217,425,426],{"align":219},"Keywords",[217,428,429],{"align":219},"When to use",[225,431,432,445,454],{},[214,433,434,438],{},[230,435,436],{"align":219},[14,437,413],{},[230,439,440,441,444],{"align":219},"Third-party libraries are only used within ",[14,442,443],{},".cpp",", for example, headers do not expose it.",[214,446,447,451],{},[230,448,449],{"align":219},[14,450,335],{},[230,452,453],{"align":219},"The header file includes third-party library types, so users need to be aware of them as well.",[214,455,456,460],{},[230,457,458],{"align":219},[14,459,417],{},[230,461,462],{"align":219},"The current target does not compile itself, it only passes downstream.",[10,464,465,466,469],{},"For example, if the header file for ",[14,467,468],{},"lib1"," is just like this:",[22,471,475],{"className":472,"code":473,"language":474,"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,476,477,485,489,500,511],{"__ignoreMap":27},[31,478,479,482],{"class":33,"line":34},[31,480,481],{"class":55},"#pragma",[31,483,484],{"class":88}," once\n",[31,486,487],{"class":33,"line":41},[31,488,67],{"emptyLinePlaceholder":66},[31,490,491,494,497],{"class":33,"line":47},[31,492,493],{"class":55},"namespace",[31,495,496],{"class":88}," lib1",[31,498,499],{"class":59}," {\n",[31,501,502,505,508],{"class":33,"line":52},[31,503,504],{"class":55},"void",[31,506,507],{"class":88}," run_eigen_vector_example",[31,509,510],{"class":59},"();\n",[31,512,513],{"class":33,"line":63},[31,514,515],{"class":59},"}\n",[10,517,518,519,521],{},"If the header file does not expose Eigen types, Eigen can be used with ",[14,520,413],{},":",[22,523,525],{"className":24,"code":524,"language":26,"meta":27,"style":27},"target_link_libraries(${PREFIX}_src_lib\n  PRIVATE\n    Eigen3::Eigen\n)\n",[14,526,527,537,542,546],{"__ignoreMap":27},[31,528,529,531,533,535],{"class":33,"line":34},[31,530,73],{"class":55},[31,532,76],{"class":59},[31,534,79],{"class":55},[31,536,82],{"class":59},[31,538,539],{"class":33,"line":41},[31,540,541],{"class":88},"  PRIVATE\n",[31,543,544],{"class":33,"line":47},[31,545,95],{"class":59},[31,547,548],{"class":33,"line":52},[31,549,101],{"class":59},[10,551,552],{},"If the header file is written as:",[22,554,556],{"className":472,"code":555,"language":474,"meta":27,"style":27},"#pragma once\n\n#include \u003CEigen\u002FDense>\n\nnamespace lib1 {\nEigen::Vector3d make_vector();\n}\n",[14,557,558,564,568,577,581,589,605],{"__ignoreMap":27},[31,559,560,562],{"class":33,"line":34},[31,561,481],{"class":55},[31,563,484],{"class":88},[31,565,566],{"class":33,"line":41},[31,567,67],{"emptyLinePlaceholder":66},[31,569,570,573],{"class":33,"line":47},[31,571,572],{"class":55},"#include",[31,574,576],{"class":575},"sZZnC"," \u003CEigen\u002FDense>\n",[31,578,579],{"class":33,"line":52},[31,580,67],{"emptyLinePlaceholder":66},[31,582,583,585,587],{"class":33,"line":63},[31,584,493],{"class":55},[31,586,496],{"class":88},[31,588,499],{"class":59},[31,590,591,594,597,600,603],{"class":33,"line":70},[31,592,593],{"class":88},"Eigen",[31,595,596],{"class":59},"::",[31,598,599],{"class":88},"Vector3d",[31,601,602],{"class":88}," make_vector",[31,604,510],{"class":59},[31,606,607],{"class":33,"line":85},[31,608,515],{"class":59},[10,610,611,612,614],{},"Therefore, when downstream includes this header file, it also requires the Eigen include path, so ",[14,613,335],{}," should be used:",[22,616,618],{"className":24,"code":617,"language":26,"meta":27,"style":27},"target_link_libraries(${PREFIX}_src_lib\n  PUBLIC\n    Eigen3::Eigen\n)\n",[14,619,620,630,634,638],{"__ignoreMap":27},[31,621,622,624,626,628],{"class":33,"line":34},[31,623,73],{"class":55},[31,625,76],{"class":59},[31,627,79],{"class":55},[31,629,82],{"class":59},[31,631,632],{"class":33,"line":41},[31,633,89],{"class":88},[31,635,636],{"class":33,"line":47},[31,637,95],{"class":59},[31,639,640],{"class":33,"line":52},[31,641,101],{"class":59},[10,643,644,645,647],{},"This template example uses ",[14,646,335],{}," to demonstrate dependency propagation; in actual projects, you can choose based on whether the header file exposes third-party types.",[138,649,240],{"id":650},"eigen3",[10,652,653],{},"Eigen is a commonly used linear algebra library, primarily a header-only library.",[275,655,657],{"id":656},"install","Install",[10,659,660],{},"Ubuntu\u002FDebian：",[22,662,666],{"className":663,"code":664,"language":665,"meta":27,"style":27},"language-bash shiki shiki-themes github-light github-dark","sudo apt install libeigen3-dev\n","bash",[14,667,668],{"__ignoreMap":27},[31,669,670,673,676,679],{"class":33,"line":34},[31,671,672],{"class":88},"sudo",[31,674,675],{"class":575}," apt",[31,677,678],{"class":575}," install",[31,680,681],{"class":575}," libeigen3-dev\n",[10,683,684],{},"Fedora：",[22,686,688],{"className":663,"code":687,"language":665,"meta":27,"style":27},"sudo dnf install eigen3-devel\n",[14,689,690],{"__ignoreMap":27},[31,691,692,694,697,699],{"class":33,"line":34},[31,693,672],{"class":88},[31,695,696],{"class":575}," dnf",[31,698,678],{"class":575},[31,700,701],{"class":575}," eigen3-devel\n",[275,703,705],{"id":704},"cmake-syntax","CMake syntax",[22,707,708],{"className":24,"code":25,"language":26,"meta":27,"style":27},[14,709,710,714,718,722,728,732,742,746,750],{"__ignoreMap":27},[31,711,712],{"class":33,"line":34},[31,713,38],{"class":37},[31,715,716],{"class":33,"line":41},[31,717,44],{"class":37},[31,719,720],{"class":33,"line":47},[31,721,38],{"class":37},[31,723,724,726],{"class":33,"line":52},[31,725,56],{"class":55},[31,727,60],{"class":59},[31,729,730],{"class":33,"line":63},[31,731,67],{"emptyLinePlaceholder":66},[31,733,734,736,738,740],{"class":33,"line":70},[31,735,73],{"class":55},[31,737,76],{"class":59},[31,739,79],{"class":55},[31,741,82],{"class":59},[31,743,744],{"class":33,"line":85},[31,745,89],{"class":88},[31,747,748],{"class":33,"line":92},[31,749,95],{"class":59},[31,751,752],{"class":33,"line":98},[31,753,101],{"class":59},[275,755,757],{"id":756},"using-c","Using C++",[22,759,761],{"className":472,"code":760,"language":474,"meta":27,"style":27},"#include \u003CEigen\u002FDense>\n\nEigen::Vector3d v(1.0, 2.0, 3.0);\n",[14,762,763,769,773],{"__ignoreMap":27},[31,764,765,767],{"class":33,"line":34},[31,766,572],{"class":55},[31,768,576],{"class":575},[31,770,771],{"class":33,"line":41},[31,772,67],{"emptyLinePlaceholder":66},[31,774,775,777,779,781,784,786,789,791,794,796,799],{"class":33,"line":47},[31,776,593],{"class":88},[31,778,596],{"class":59},[31,780,599],{"class":88},[31,782,783],{"class":88}," v",[31,785,76],{"class":59},[31,787,788],{"class":192},"1.0",[31,790,241],{"class":59},[31,792,793],{"class":192},"2.0",[31,795,241],{"class":59},[31,797,798],{"class":192},"3.0",[31,800,801],{"class":59},");\n",[275,803,805],{"id":804},"visibility-recommendations","Visibility recommendations",[208,807,808,818],{},[211,809,810],{},[214,811,812,815],{},[217,813,814],{"align":219},"Scene",[217,816,817],{"align":219},"Linking method",[225,819,820,832],{},[214,821,822,827],{},[230,823,824,825,114],{"align":219},"Eigen is only used in ",[14,826,443],{},[230,828,829],{"align":219},[14,830,831],{},"PRIVATE Eigen3::Eigen",[214,833,834,843],{},[230,835,836,837,127,840,114],{"align":219},"The header file exposes ",[14,838,839],{},"Eigen::Matrix",[14,841,842],{},"Eigen::Vector",[230,844,845],{"align":219},[14,846,847],{},"PUBLIC Eigen3::Eigen",[138,849,851],{"id":850},"opencv4","OpenCV4",[10,853,854],{},"OpenCV is a computer vision library with many modules; it's recommended to introduce by components.",[275,856,657],{"id":857},"install-1",[10,859,660],{},[22,861,863],{"className":663,"code":862,"language":665,"meta":27,"style":27},"sudo apt install libopencv-dev\n",[14,864,865],{"__ignoreMap":27},[31,866,867,869,871,873],{"class":33,"line":34},[31,868,672],{"class":88},[31,870,675],{"class":575},[31,872,678],{"class":575},[31,874,875],{"class":575}," libopencv-dev\n",[10,877,684],{},[22,879,881],{"className":663,"code":880,"language":665,"meta":27,"style":27},"sudo dnf install opencv-devel\n",[14,882,883],{"__ignoreMap":27},[31,884,885,887,889,891],{"class":33,"line":34},[31,886,672],{"class":88},[31,888,696],{"class":575},[31,890,678],{"class":575},[31,892,893],{"class":575}," opencv-devel\n",[275,895,897],{"id":896},"common-components","Common Components",[208,899,900,909],{},[211,901,902],{},[214,903,904,907],{},[217,905,906],{"align":219},"component",[217,908,223],{"align":219},[225,910,911,924,934,944,954,964,974,984],{},[214,912,913,918],{},[230,914,915],{"align":219},[14,916,917],{},"core",[230,919,920,921],{"align":219},"Basic data structures, such as ",[14,922,923],{},"cv::Mat",[214,925,926,931],{},[230,927,928],{"align":219},[14,929,930],{},"imgproc",[230,932,933],{"align":219},"image processing",[214,935,936,941],{},[230,937,938],{"align":219},[14,939,940],{},"imgcodecs",[230,942,943],{"align":219},"Read and write images",[214,945,946,951],{},[230,947,948],{"align":219},[14,949,950],{},"highgui",[230,952,953],{"align":219},"Simple window display",[214,955,956,961],{},[230,957,958],{"align":219},[14,959,960],{},"videoio",[230,962,963],{"align":219},"Camera and Video I\u002FO",[214,965,966,971],{},[230,967,968],{"align":219},[14,969,970],{},"calib3d",[230,972,973],{"align":219},"Camera calibration, geometry",[214,975,976,981],{},[230,977,978],{"align":219},[14,979,980],{},"features2d",[230,982,983],{"align":219},"feature points",[214,985,986,991],{},[230,987,988],{"align":219},[14,989,990],{},"dnn",[230,992,993],{"align":219},"DNN inference module",[275,995,997],{"id":996},"cmake-writing-recommended-to-organize-by-component","CMake Writing: Recommended to Organize by Component",[22,999,1001],{"className":24,"code":1000,"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,1002,1003,1007,1011,1015,1022,1026,1036,1040,1045,1050,1056,1062],{"__ignoreMap":27},[31,1004,1005],{"class":33,"line":34},[31,1006,38],{"class":37},[31,1008,1009],{"class":33,"line":41},[31,1010,44],{"class":37},[31,1012,1013],{"class":33,"line":47},[31,1014,38],{"class":37},[31,1016,1017,1019],{"class":33,"line":52},[31,1018,56],{"class":55},[31,1020,1021],{"class":59},"(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs highgui)\n",[31,1023,1024],{"class":33,"line":63},[31,1025,67],{"emptyLinePlaceholder":66},[31,1027,1028,1030,1032,1034],{"class":33,"line":70},[31,1029,73],{"class":55},[31,1031,76],{"class":59},[31,1033,79],{"class":55},[31,1035,82],{"class":59},[31,1037,1038],{"class":33,"line":85},[31,1039,541],{"class":88},[31,1041,1042],{"class":33,"line":92},[31,1043,1044],{"class":59},"    opencv_core\n",[31,1046,1047],{"class":33,"line":98},[31,1048,1049],{"class":59},"    opencv_imgproc\n",[31,1051,1053],{"class":33,"line":1052},10,[31,1054,1055],{"class":59},"    opencv_imgcodecs\n",[31,1057,1059],{"class":33,"line":1058},11,[31,1060,1061],{"class":59},"    opencv_highgui\n",[31,1063,1065],{"class":33,"line":1064},12,[31,1066,101],{"class":59},[10,1068,1069,1070,1072],{},"Some OpenCV installations provide imported targets like ",[14,1071,130],{}," which you can also use.",[22,1074,1076],{"className":24,"code":1075,"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,1077,1078,1088,1092,1097,1102,1107,1112],{"__ignoreMap":27},[31,1079,1080,1082,1084,1086],{"class":33,"line":34},[31,1081,73],{"class":55},[31,1083,76],{"class":59},[31,1085,79],{"class":55},[31,1087,82],{"class":59},[31,1089,1090],{"class":33,"line":41},[31,1091,541],{"class":88},[31,1093,1094],{"class":33,"line":47},[31,1095,1096],{"class":59},"    OpenCV::opencv_core\n",[31,1098,1099],{"class":33,"line":52},[31,1100,1101],{"class":59},"    OpenCV::opencv_imgproc\n",[31,1103,1104],{"class":33,"line":63},[31,1105,1106],{"class":59},"    OpenCV::opencv_imgcodecs\n",[31,1108,1109],{"class":33,"line":70},[31,1110,1111],{"class":59},"    OpenCV::opencv_highgui\n",[31,1113,1114],{"class":33,"line":85},[31,1115,101],{"class":59},[10,1117,1118,1119,1122,1123,1125],{},"If your system doesn't have these ",[14,1120,1121],{},"OpenCV::"," targets, then use the previous ",[14,1124,385],{}," format.",[275,1127,1129],{"id":1128},"cmake-approach-simple-and-brute-force-version","CMake Approach: Simple and Brute-Force Version",[22,1131,1133],{"className":24,"code":1132,"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,1134,1135,1141,1145,1155,1159,1164],{"__ignoreMap":27},[31,1136,1137,1139],{"class":33,"line":34},[31,1138,56],{"class":55},[31,1140,182],{"class":59},[31,1142,1143],{"class":33,"line":41},[31,1144,67],{"emptyLinePlaceholder":66},[31,1146,1147,1149,1151,1153],{"class":33,"line":47},[31,1148,73],{"class":55},[31,1150,76],{"class":59},[31,1152,79],{"class":55},[31,1154,82],{"class":59},[31,1156,1157],{"class":33,"line":52},[31,1158,541],{"class":88},[31,1160,1161],{"class":33,"line":63},[31,1162,1163],{"class":55},"    ${OpenCV_LIBS}\n",[31,1165,1166],{"class":33,"line":70},[31,1167,101],{"class":59},[10,1169,1170],{},"This approach works, but it's not as clear as the component-based method. For tutorials, I recommend prioritizing component-based writing.",[275,1172,757],{"id":1173},"using-c-1",[22,1175,1177],{"className":472,"code":1176,"language":474,"meta":27,"style":27},"#include \u003Copencv2\u002Fopencv.hpp>\n\ncv::Mat image = cv::imread(\"test.png\");\n",[14,1178,1179,1186,1190],{"__ignoreMap":27},[31,1180,1181,1183],{"class":33,"line":34},[31,1182,572],{"class":55},[31,1184,1185],{"class":575}," \u003Copencv2\u002Fopencv.hpp>\n",[31,1187,1188],{"class":33,"line":41},[31,1189,67],{"emptyLinePlaceholder":66},[31,1191,1192,1195,1198,1201,1204,1206,1209,1211,1214],{"class":33,"line":47},[31,1193,1194],{"class":88},"cv",[31,1196,1197],{"class":59},"::Mat image ",[31,1199,1200],{"class":55},"=",[31,1202,1203],{"class":88}," cv",[31,1205,596],{"class":59},[31,1207,1208],{"class":88},"imread",[31,1210,76],{"class":59},[31,1212,1213],{"class":575},"\"test.png\"",[31,1215,801],{"class":59},[138,1217,1219],{"id":1218},"boost","Boost",[10,1221,1222,1223,127,1225,1228],{},"Boost is a large collection of C++ libraries. Here are ",[14,1224,193],{},[14,1226,1227],{},"filesystem"," as examples.",[275,1230,657],{"id":1231},"install-2",[10,1233,660],{},[22,1235,1237],{"className":663,"code":1236,"language":665,"meta":27,"style":27},"sudo apt install libboost-all-dev\n",[14,1238,1239],{"__ignoreMap":27},[31,1240,1241,1243,1245,1247],{"class":33,"line":34},[31,1242,672],{"class":88},[31,1244,675],{"class":575},[31,1246,678],{"class":575},[31,1248,1249],{"class":575}," libboost-all-dev\n",[10,1251,684],{},[22,1253,1255],{"className":663,"code":1254,"language":665,"meta":27,"style":27},"sudo dnf install boost-devel\n",[14,1256,1257],{"__ignoreMap":27},[31,1258,1259,1261,1263,1265],{"class":33,"line":34},[31,1260,672],{"class":88},[31,1262,696],{"class":575},[31,1264,678],{"class":575},[31,1266,1267],{"class":575}," boost-devel\n",[10,1269,1270],{},"If you only want to install a few components, Ubuntu\u002FDebian also allows you to install similar ones on demand:",[22,1272,1274],{"className":663,"code":1273,"language":665,"meta":27,"style":27},"sudo apt install libboost-system-dev libboost-filesystem-dev\n",[14,1275,1276],{"__ignoreMap":27},[31,1277,1278,1280,1282,1284,1287],{"class":33,"line":34},[31,1279,672],{"class":88},[31,1281,675],{"class":575},[31,1283,678],{"class":575},[31,1285,1286],{"class":575}," libboost-system-dev",[31,1288,1289],{"class":575}," libboost-filesystem-dev\n",[275,1291,705],{"id":1292},"cmake-syntax-1",[22,1294,1296],{"className":24,"code":1295,"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,1297,1298,1302,1306,1310,1320,1324,1334,1338,1346,1351],{"__ignoreMap":27},[31,1299,1300],{"class":33,"line":34},[31,1301,38],{"class":37},[31,1303,1304],{"class":33,"line":41},[31,1305,44],{"class":37},[31,1307,1308],{"class":33,"line":47},[31,1309,38],{"class":37},[31,1311,1312,1314,1316,1318],{"class":33,"line":52},[31,1313,56],{"class":55},[31,1315,189],{"class":59},[31,1317,193],{"class":192},[31,1319,196],{"class":59},[31,1321,1322],{"class":33,"line":63},[31,1323,67],{"emptyLinePlaceholder":66},[31,1325,1326,1328,1330,1332],{"class":33,"line":70},[31,1327,73],{"class":55},[31,1329,76],{"class":59},[31,1331,79],{"class":55},[31,1333,82],{"class":59},[31,1335,1336],{"class":33,"line":85},[31,1337,541],{"class":88},[31,1339,1340,1343],{"class":33,"line":92},[31,1341,1342],{"class":59},"    Boost::",[31,1344,1345],{"class":192},"system\n",[31,1347,1348],{"class":33,"line":98},[31,1349,1350],{"class":59},"    Boost::filesystem\n",[31,1352,1353],{"class":33,"line":1052},[31,1354,101],{"class":59},[275,1356,757],{"id":1357},"using-c-2",[22,1359,1361],{"className":472,"code":1360,"language":474,"meta":27,"style":27},"#include \u003Cboost\u002Ffilesystem.hpp>\n\nboost::filesystem::path p{\".\"};\n",[14,1362,1363,1370,1374],{"__ignoreMap":27},[31,1364,1365,1367],{"class":33,"line":34},[31,1366,572],{"class":55},[31,1368,1369],{"class":575}," \u003Cboost\u002Ffilesystem.hpp>\n",[31,1371,1372],{"class":33,"line":41},[31,1373,67],{"emptyLinePlaceholder":66},[31,1375,1376,1378,1380,1382,1385,1388],{"class":33,"line":47},[31,1377,1218],{"class":88},[31,1379,596],{"class":59},[31,1381,1227],{"class":88},[31,1383,1384],{"class":59},"::path p{",[31,1386,1387],{"class":575},"\".\"",[31,1389,1390],{"class":59},"};\n",[10,1392,1393,1394,1397],{},"Note: If using C++17's ",[14,1395,1396],{},"std::filesystem",", Boost.Filesystem is often unnecessary in many scenarios.",[138,1399,1401],{"id":1400},"pcl","PCL",[10,1403,1404],{},"PCL is the point cloud library, commonly used in robotics, 3D perception, and SLAM projects.",[275,1406,657],{"id":1407},"install-3",[10,1409,660],{},[22,1411,1413],{"className":663,"code":1412,"language":665,"meta":27,"style":27},"sudo apt install libpcl-dev\n",[14,1414,1415],{"__ignoreMap":27},[31,1416,1417,1419,1421,1423],{"class":33,"line":34},[31,1418,672],{"class":88},[31,1420,675],{"class":575},[31,1422,678],{"class":575},[31,1424,1425],{"class":575}," libpcl-dev\n",[10,1427,684],{},[22,1429,1431],{"className":663,"code":1430,"language":665,"meta":27,"style":27},"sudo dnf install pcl-devel\n",[14,1432,1433],{"__ignoreMap":27},[31,1434,1435,1437,1439,1441],{"class":33,"line":34},[31,1436,672],{"class":88},[31,1438,696],{"class":575},[31,1440,678],{"class":575},[31,1442,1443],{"class":575}," pcl-devel\n",[275,1445,897],{"id":1446},"common-components-1",[208,1448,1449,1457],{},[211,1450,1451],{},[214,1452,1453,1455],{},[217,1454,906],{"align":219},[217,1456,223],{"align":219},[225,1458,1459,1469,1479,1489,1499,1508,1518],{},[214,1460,1461,1466],{},[230,1462,1463],{"align":219},[14,1464,1465],{},"common",[230,1467,1468],{"align":219},"point type, basic tools",[214,1470,1471,1476],{},[230,1472,1473],{"align":219},[14,1474,1475],{},"io",[230,1477,1478],{"align":219},"Reading and writing PCD\u002FPLY files and similar formats.",[214,1480,1481,1486],{},[230,1482,1483],{"align":219},[14,1484,1485],{},"filters",[230,1487,1488],{"align":219},"filtering",[214,1490,1491,1496],{},[230,1492,1493],{"align":219},[14,1494,1495],{},"features",[230,1497,1498],{"align":219},"feature",[214,1500,1501,1506],{},[230,1502,1503],{"align":219},[14,1504,1505],{},"registration",[230,1507,1505],{"align":219},[214,1509,1510,1515],{},[230,1511,1512],{"align":219},[14,1513,1514],{},"segmentation",[230,1516,1517],{"align":219},"Division",[214,1519,1520,1525],{},[230,1521,1522],{"align":219},[14,1523,1524],{},"visualization",[230,1526,1527],{"align":219},"Visualization",[275,1529,705],{"id":1530},"cmake-syntax-2",[22,1532,1534],{"className":24,"code":1533,"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,1535,1536,1540,1544,1548,1555,1559,1569,1573,1578,1582,1586,1597,1601,1607,1612,1617,1629,1634,1640],{"__ignoreMap":27},[31,1537,1538],{"class":33,"line":34},[31,1539,38],{"class":37},[31,1541,1542],{"class":33,"line":41},[31,1543,44],{"class":37},[31,1545,1546],{"class":33,"line":47},[31,1547,38],{"class":37},[31,1549,1550,1552],{"class":33,"line":52},[31,1551,56],{"class":55},[31,1553,1554],{"class":59},"(PCL REQUIRED COMPONENTS common io filters)\n",[31,1556,1557],{"class":33,"line":63},[31,1558,67],{"emptyLinePlaceholder":66},[31,1560,1561,1563,1565,1567],{"class":33,"line":70},[31,1562,73],{"class":55},[31,1564,76],{"class":59},[31,1566,79],{"class":55},[31,1568,82],{"class":59},[31,1570,1571],{"class":33,"line":85},[31,1572,541],{"class":88},[31,1574,1575],{"class":33,"line":92},[31,1576,1577],{"class":55},"    ${PCL_LIBRARIES}\n",[31,1579,1580],{"class":33,"line":98},[31,1581,101],{"class":59},[31,1583,1584],{"class":33,"line":1052},[31,1585,67],{"emptyLinePlaceholder":66},[31,1587,1588,1591,1593,1595],{"class":33,"line":1058},[31,1589,1590],{"class":55},"target_include_directories",[31,1592,76],{"class":59},[31,1594,79],{"class":55},[31,1596,82],{"class":59},[31,1598,1599],{"class":33,"line":1064},[31,1600,541],{"class":88},[31,1602,1604],{"class":33,"line":1603},13,[31,1605,1606],{"class":55},"    ${PCL_INCLUDE_DIRS}\n",[31,1608,1610],{"class":33,"line":1609},14,[31,1611,101],{"class":59},[31,1613,1615],{"class":33,"line":1614},15,[31,1616,67],{"emptyLinePlaceholder":66},[31,1618,1620,1623,1625,1627],{"class":33,"line":1619},16,[31,1621,1622],{"class":55},"target_compile_definitions",[31,1624,76],{"class":59},[31,1626,79],{"class":55},[31,1628,82],{"class":59},[31,1630,1632],{"class":33,"line":1631},17,[31,1633,541],{"class":88},[31,1635,1637],{"class":33,"line":1636},18,[31,1638,1639],{"class":55},"    ${PCL_DEFINITIONS}\n",[31,1641,1643],{"class":33,"line":1642},19,[31,1644,101],{"class":59},[10,1646,1647],{},"Some PCL versions also provide imported targets. If your environment supports them, you can prioritize using them as follows:",[22,1649,1651],{"className":24,"code":1650,"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,1652,1653,1663,1667,1672,1677,1682],{"__ignoreMap":27},[31,1654,1655,1657,1659,1661],{"class":33,"line":34},[31,1656,73],{"class":55},[31,1658,76],{"class":59},[31,1660,79],{"class":55},[31,1662,82],{"class":59},[31,1664,1665],{"class":33,"line":41},[31,1666,541],{"class":88},[31,1668,1669],{"class":33,"line":47},[31,1670,1671],{"class":59},"    PCL::common\n",[31,1673,1674],{"class":33,"line":52},[31,1675,1676],{"class":59},"    PCL::io\n",[31,1678,1679],{"class":33,"line":63},[31,1680,1681],{"class":59},"    PCL::filters\n",[31,1683,1684],{"class":33,"line":70},[31,1685,101],{"class":59},[10,1687,1688,1689,114],{},"The actual selection is based on the results provided by the local service ",[14,1690,1691],{},"find_package(PCL ...)",[138,1693,1694],{"id":1694},"fmt",[10,1696,1697,1699,1700,1703],{},[14,1698,1694],{}," is a formatted output library, and the style of C++20 ",[14,1701,1702],{},"std::format"," also derives from it.",[275,1705,657],{"id":1706},"install-4",[10,1708,660],{},[22,1710,1712],{"className":663,"code":1711,"language":665,"meta":27,"style":27},"sudo apt install libfmt-dev\n",[14,1713,1714],{"__ignoreMap":27},[31,1715,1716,1718,1720,1722],{"class":33,"line":34},[31,1717,672],{"class":88},[31,1719,675],{"class":575},[31,1721,678],{"class":575},[31,1723,1724],{"class":575}," libfmt-dev\n",[10,1726,684],{},[22,1728,1730],{"className":663,"code":1729,"language":665,"meta":27,"style":27},"sudo dnf install fmt-devel\n",[14,1731,1732],{"__ignoreMap":27},[31,1733,1734,1736,1738,1740],{"class":33,"line":34},[31,1735,672],{"class":88},[31,1737,696],{"class":575},[31,1739,678],{"class":575},[31,1741,1742],{"class":575}," fmt-devel\n",[275,1744,705],{"id":1745},"cmake-syntax-3",[22,1747,1749],{"className":24,"code":1748,"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,1750,1751,1755,1759,1763,1770,1774,1784,1788,1793],{"__ignoreMap":27},[31,1752,1753],{"class":33,"line":34},[31,1754,38],{"class":37},[31,1756,1757],{"class":33,"line":41},[31,1758,44],{"class":37},[31,1760,1761],{"class":33,"line":47},[31,1762,38],{"class":37},[31,1764,1765,1767],{"class":33,"line":52},[31,1766,56],{"class":55},[31,1768,1769],{"class":59},"(fmt REQUIRED)\n",[31,1771,1772],{"class":33,"line":63},[31,1773,67],{"emptyLinePlaceholder":66},[31,1775,1776,1778,1780,1782],{"class":33,"line":70},[31,1777,73],{"class":55},[31,1779,76],{"class":59},[31,1781,79],{"class":55},[31,1783,82],{"class":59},[31,1785,1786],{"class":33,"line":85},[31,1787,541],{"class":88},[31,1789,1790],{"class":33,"line":92},[31,1791,1792],{"class":59},"    fmt::fmt\n",[31,1794,1795],{"class":33,"line":98},[31,1796,101],{"class":59},[275,1798,757],{"id":1799},"using-c-3",[22,1801,1803],{"className":472,"code":1802,"language":474,"meta":27,"style":27},"#include \u003Cfmt\u002Fcore.h>\n\nauto s = fmt::format(\"value = {}\", 42);\n",[14,1804,1805,1812,1816],{"__ignoreMap":27},[31,1806,1807,1809],{"class":33,"line":34},[31,1808,572],{"class":55},[31,1810,1811],{"class":575}," \u003Cfmt\u002Fcore.h>\n",[31,1813,1814],{"class":33,"line":41},[31,1815,67],{"emptyLinePlaceholder":66},[31,1817,1818,1821,1824,1826,1829,1831,1834,1836,1839,1841,1844],{"class":33,"line":47},[31,1819,1820],{"class":55},"auto",[31,1822,1823],{"class":59}," s ",[31,1825,1200],{"class":55},[31,1827,1828],{"class":88}," fmt",[31,1830,596],{"class":59},[31,1832,1833],{"class":88},"format",[31,1835,76],{"class":59},[31,1837,1838],{"class":575},"\"value = {}\"",[31,1840,241],{"class":59},[31,1842,1843],{"class":192},"42",[31,1845,801],{"class":59},[138,1847,1848],{"id":1848},"spdlog",[10,1850,1851,1853],{},[14,1852,1848],{}," is a commonly used logging library.",[275,1855,657],{"id":1856},"install-5",[10,1858,660],{},[22,1860,1862],{"className":663,"code":1861,"language":665,"meta":27,"style":27},"sudo apt install libspdlog-dev\n",[14,1863,1864],{"__ignoreMap":27},[31,1865,1866,1868,1870,1872],{"class":33,"line":34},[31,1867,672],{"class":88},[31,1869,675],{"class":575},[31,1871,678],{"class":575},[31,1873,1874],{"class":575}," libspdlog-dev\n",[10,1876,684],{},[22,1878,1880],{"className":663,"code":1879,"language":665,"meta":27,"style":27},"sudo dnf install spdlog-devel\n",[14,1881,1882],{"__ignoreMap":27},[31,1883,1884,1886,1888,1890],{"class":33,"line":34},[31,1885,672],{"class":88},[31,1887,696],{"class":575},[31,1889,678],{"class":575},[31,1891,1892],{"class":575}," spdlog-devel\n",[275,1894,705],{"id":1895},"cmake-syntax-4",[22,1897,1899],{"className":24,"code":1898,"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,1900,1901,1905,1909,1913,1920,1924,1934,1938,1943],{"__ignoreMap":27},[31,1902,1903],{"class":33,"line":34},[31,1904,38],{"class":37},[31,1906,1907],{"class":33,"line":41},[31,1908,44],{"class":37},[31,1910,1911],{"class":33,"line":47},[31,1912,38],{"class":37},[31,1914,1915,1917],{"class":33,"line":52},[31,1916,56],{"class":55},[31,1918,1919],{"class":59},"(spdlog REQUIRED)\n",[31,1921,1922],{"class":33,"line":63},[31,1923,67],{"emptyLinePlaceholder":66},[31,1925,1926,1928,1930,1932],{"class":33,"line":70},[31,1927,73],{"class":55},[31,1929,76],{"class":59},[31,1931,79],{"class":55},[31,1933,82],{"class":59},[31,1935,1936],{"class":33,"line":85},[31,1937,541],{"class":88},[31,1939,1940],{"class":33,"line":92},[31,1941,1942],{"class":59},"    spdlog::spdlog\n",[31,1944,1945],{"class":33,"line":98},[31,1946,101],{"class":59},[275,1948,757],{"id":1949},"using-c-4",[22,1951,1953],{"className":472,"code":1952,"language":474,"meta":27,"style":27},"#include \u003Cspdlog\u002Fspdlog.h>\n\nspdlog::info(\"hello {}\", \"spdlog\");\n",[14,1954,1955,1962,1966],{"__ignoreMap":27},[31,1956,1957,1959],{"class":33,"line":34},[31,1958,572],{"class":55},[31,1960,1961],{"class":575}," \u003Cspdlog\u002Fspdlog.h>\n",[31,1963,1964],{"class":33,"line":41},[31,1965,67],{"emptyLinePlaceholder":66},[31,1967,1968,1970,1972,1975,1977,1980,1982,1985],{"class":33,"line":47},[31,1969,1848],{"class":88},[31,1971,596],{"class":59},[31,1973,1974],{"class":88},"info",[31,1976,76],{"class":59},[31,1978,1979],{"class":575},"\"hello {}\"",[31,1981,241],{"class":59},[31,1983,1984],{"class":575},"\"spdlog\"",[31,1986,801],{"class":59},[138,1988,1989],{"id":1989},"yaml-cpp",[10,1991,1992,1994],{},[14,1993,1989],{}," is commonly used to read configuration files.",[275,1996,657],{"id":1997},"install-6",[10,1999,660],{},[22,2001,2003],{"className":663,"code":2002,"language":665,"meta":27,"style":27},"sudo apt install libyaml-cpp-dev\n",[14,2004,2005],{"__ignoreMap":27},[31,2006,2007,2009,2011,2013],{"class":33,"line":34},[31,2008,672],{"class":88},[31,2010,675],{"class":575},[31,2012,678],{"class":575},[31,2014,2015],{"class":575}," libyaml-cpp-dev\n",[10,2017,684],{},[22,2019,2021],{"className":663,"code":2020,"language":665,"meta":27,"style":27},"sudo dnf install yaml-cpp-devel\n",[14,2022,2023],{"__ignoreMap":27},[31,2024,2025,2027,2029,2031],{"class":33,"line":34},[31,2026,672],{"class":88},[31,2028,696],{"class":575},[31,2030,678],{"class":575},[31,2032,2033],{"class":575}," yaml-cpp-devel\n",[275,2035,705],{"id":2036},"cmake-syntax-5",[22,2038,2040],{"className":24,"code":2039,"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,2041,2042,2046,2050,2054,2061,2065,2075,2079,2084],{"__ignoreMap":27},[31,2043,2044],{"class":33,"line":34},[31,2045,38],{"class":37},[31,2047,2048],{"class":33,"line":41},[31,2049,44],{"class":37},[31,2051,2052],{"class":33,"line":47},[31,2053,38],{"class":37},[31,2055,2056,2058],{"class":33,"line":52},[31,2057,56],{"class":55},[31,2059,2060],{"class":59},"(yaml-cpp REQUIRED)\n",[31,2062,2063],{"class":33,"line":63},[31,2064,67],{"emptyLinePlaceholder":66},[31,2066,2067,2069,2071,2073],{"class":33,"line":70},[31,2068,73],{"class":55},[31,2070,76],{"class":59},[31,2072,79],{"class":55},[31,2074,82],{"class":59},[31,2076,2077],{"class":33,"line":85},[31,2078,541],{"class":88},[31,2080,2081],{"class":33,"line":92},[31,2082,2083],{"class":59},"    yaml-cpp::yaml-cpp\n",[31,2085,2086],{"class":33,"line":98},[31,2087,101],{"class":59},[10,2089,2090,2091,2093,2094,2097],{},"Some older environments may have the target name ",[14,2092,1989],{},". If ",[14,2095,2096],{},"yaml-cpp::yaml-cpp"," is not present, adjust according to the error message.",[138,2099,2100],{"id":2100},"nlohmann_json",[10,2102,2103,2105],{},[14,2104,2100],{}," is a commonly used JSON library, typically a header-only library.",[275,2107,657],{"id":2108},"install-7",[10,2110,660],{},[22,2112,2114],{"className":663,"code":2113,"language":665,"meta":27,"style":27},"sudo apt install nlohmann-json3-dev\n",[14,2115,2116],{"__ignoreMap":27},[31,2117,2118,2120,2122,2124],{"class":33,"line":34},[31,2119,672],{"class":88},[31,2121,675],{"class":575},[31,2123,678],{"class":575},[31,2125,2126],{"class":575}," nlohmann-json3-dev\n",[10,2128,684],{},[22,2130,2132],{"className":663,"code":2131,"language":665,"meta":27,"style":27},"sudo dnf install json-devel\n",[14,2133,2134],{"__ignoreMap":27},[31,2135,2136,2138,2140,2142],{"class":33,"line":34},[31,2137,672],{"class":88},[31,2139,696],{"class":575},[31,2141,678],{"class":575},[31,2143,2144],{"class":575}," json-devel\n",[275,2146,705],{"id":2147},"cmake-syntax-6",[22,2149,2151],{"className":24,"code":2150,"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,2152,2153,2157,2161,2165,2172,2176,2186,2190,2195],{"__ignoreMap":27},[31,2154,2155],{"class":33,"line":34},[31,2156,38],{"class":37},[31,2158,2159],{"class":33,"line":41},[31,2160,44],{"class":37},[31,2162,2163],{"class":33,"line":47},[31,2164,38],{"class":37},[31,2166,2167,2169],{"class":33,"line":52},[31,2168,56],{"class":55},[31,2170,2171],{"class":59},"(nlohmann_json REQUIRED)\n",[31,2173,2174],{"class":33,"line":63},[31,2175,67],{"emptyLinePlaceholder":66},[31,2177,2178,2180,2182,2184],{"class":33,"line":70},[31,2179,73],{"class":55},[31,2181,76],{"class":59},[31,2183,79],{"class":55},[31,2185,82],{"class":59},[31,2187,2188],{"class":33,"line":85},[31,2189,541],{"class":88},[31,2191,2192],{"class":33,"line":92},[31,2193,2194],{"class":59},"    nlohmann_json::nlohmann_json\n",[31,2196,2197],{"class":33,"line":98},[31,2198,101],{"class":59},[275,2200,757],{"id":2201},"using-c-5",[22,2203,2205],{"className":472,"code":2204,"language":474,"meta":27,"style":27},"#include \u003Cnlohmann\u002Fjson.hpp>\n\nnlohmann::json data;\ndata[\"name\"] = \"cmake_template\";\n",[14,2206,2207,2214,2218,2226],{"__ignoreMap":27},[31,2208,2209,2211],{"class":33,"line":34},[31,2210,572],{"class":55},[31,2212,2213],{"class":575}," \u003Cnlohmann\u002Fjson.hpp>\n",[31,2215,2216],{"class":33,"line":41},[31,2217,67],{"emptyLinePlaceholder":66},[31,2219,2220,2223],{"class":33,"line":47},[31,2221,2222],{"class":88},"nlohmann",[31,2224,2225],{"class":59},"::json data;\n",[31,2227,2228,2231,2234,2237,2239,2242],{"class":33,"line":52},[31,2229,2230],{"class":59},"data[",[31,2232,2233],{"class":575},"\"name\"",[31,2235,2236],{"class":59},"] ",[31,2238,1200],{"class":55},[31,2240,2241],{"class":575}," \"cmake_template\"",[31,2243,2244],{"class":59},";\n",[138,2246,2248],{"id":2247},"threads","Threads",[10,2250,2251,2252,2254],{},"The C++ standard threading library typically does not require installing additional packages, but it is recommended to use CMake's ",[14,2253,2248],{}," package during linking.",[275,2256,657],{"id":2257},"install-8",[10,2259,2260],{},"Generally, no separate installation is required.",[10,2262,2263],{},"If the compiler toolchain is missing:",[10,2265,660],{},[22,2267,2269],{"className":663,"code":2268,"language":665,"meta":27,"style":27},"sudo apt install build-essential\n",[14,2270,2271],{"__ignoreMap":27},[31,2272,2273,2275,2277,2279],{"class":33,"line":34},[31,2274,672],{"class":88},[31,2276,675],{"class":575},[31,2278,678],{"class":575},[31,2280,2281],{"class":575}," build-essential\n",[10,2283,684],{},[22,2285,2287],{"className":663,"code":2286,"language":665,"meta":27,"style":27},"sudo dnf install gcc gcc-c++ make\n",[14,2288,2289],{"__ignoreMap":27},[31,2290,2291,2293,2295,2297,2300,2303],{"class":33,"line":34},[31,2292,672],{"class":88},[31,2294,696],{"class":575},[31,2296,678],{"class":575},[31,2298,2299],{"class":575}," gcc",[31,2301,2302],{"class":575}," gcc-c++",[31,2304,2305],{"class":575}," make\n",[275,2307,705],{"id":2308},"cmake-syntax-7",[22,2310,2312],{"className":24,"code":2311,"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,2313,2314,2318,2322,2326,2333,2337,2347,2351,2356],{"__ignoreMap":27},[31,2315,2316],{"class":33,"line":34},[31,2317,38],{"class":37},[31,2319,2320],{"class":33,"line":41},[31,2321,44],{"class":37},[31,2323,2324],{"class":33,"line":47},[31,2325,38],{"class":37},[31,2327,2328,2330],{"class":33,"line":52},[31,2329,56],{"class":55},[31,2331,2332],{"class":59},"(Threads REQUIRED)\n",[31,2334,2335],{"class":33,"line":63},[31,2336,67],{"emptyLinePlaceholder":66},[31,2338,2339,2341,2343,2345],{"class":33,"line":70},[31,2340,73],{"class":55},[31,2342,76],{"class":59},[31,2344,79],{"class":55},[31,2346,82],{"class":59},[31,2348,2349],{"class":33,"line":85},[31,2350,541],{"class":88},[31,2352,2353],{"class":33,"line":92},[31,2354,2355],{"class":59},"    Threads::Threads\n",[31,2357,2358],{"class":33,"line":98},[31,2359,101],{"class":59},[275,2361,757],{"id":2362},"using-c-6",[22,2364,2366],{"className":472,"code":2365,"language":474,"meta":27,"style":27},"#include \u003Cthread>\n\nstd::thread worker([] {\n    \u002F\u002F do work\n});\nworker.join();\n",[14,2367,2368,2375,2379,2395,2400,2405],{"__ignoreMap":27},[31,2369,2370,2372],{"class":33,"line":34},[31,2371,572],{"class":55},[31,2373,2374],{"class":575}," \u003Cthread>\n",[31,2376,2377],{"class":33,"line":41},[31,2378,67],{"emptyLinePlaceholder":66},[31,2380,2381,2384,2386,2389,2392],{"class":33,"line":47},[31,2382,2383],{"class":88},"std",[31,2385,596],{"class":59},[31,2387,2388],{"class":88},"thread",[31,2390,2391],{"class":88}," worker",[31,2393,2394],{"class":59},"([] {\n",[31,2396,2397],{"class":33,"line":52},[31,2398,2399],{"class":37},"    \u002F\u002F do work\n",[31,2401,2402],{"class":33,"line":63},[31,2403,2404],{"class":59},"});\n",[31,2406,2407,2410,2413],{"class":33,"line":70},[31,2408,2409],{"class":59},"worker.",[31,2411,2412],{"class":88},"join",[31,2414,510],{"class":59},[138,2416,2418],{"id":2417},"openmp","OpenMP",[10,2420,2421],{},"OpenMP is a programming interface for multi-threaded parallel computing in shared-memory systems. It allows developers to parallelize code using pragmas and runtime library routines.",[275,2423,657],{"id":2424},"install-9",[10,2426,660],{},[22,2428,2430],{"className":663,"code":2429,"language":665,"meta":27,"style":27},"sudo apt install libomp-dev\n",[14,2431,2432],{"__ignoreMap":27},[31,2433,2434,2436,2438,2440],{"class":33,"line":34},[31,2435,672],{"class":88},[31,2437,675],{"class":575},[31,2439,678],{"class":575},[31,2441,2442],{"class":575}," libomp-dev\n",[10,2444,684],{},[22,2446,2448],{"className":663,"code":2447,"language":665,"meta":27,"style":27},"sudo dnf install libgomp\n",[14,2449,2450],{"__ignoreMap":27},[31,2451,2452,2454,2456,2458],{"class":33,"line":34},[31,2453,672],{"class":88},[31,2455,696],{"class":575},[31,2457,678],{"class":575},[31,2459,2460],{"class":575}," libgomp\n",[275,2462,705],{"id":2463},"cmake-syntax-8",[22,2465,2467],{"className":24,"code":2466,"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,2468,2469,2473,2477,2481,2488,2492,2502,2506,2511],{"__ignoreMap":27},[31,2470,2471],{"class":33,"line":34},[31,2472,38],{"class":37},[31,2474,2475],{"class":33,"line":41},[31,2476,44],{"class":37},[31,2478,2479],{"class":33,"line":47},[31,2480,38],{"class":37},[31,2482,2483,2485],{"class":33,"line":52},[31,2484,56],{"class":55},[31,2486,2487],{"class":59},"(OpenMP REQUIRED)\n",[31,2489,2490],{"class":33,"line":63},[31,2491,67],{"emptyLinePlaceholder":66},[31,2493,2494,2496,2498,2500],{"class":33,"line":70},[31,2495,73],{"class":55},[31,2497,76],{"class":59},[31,2499,79],{"class":55},[31,2501,82],{"class":59},[31,2503,2504],{"class":33,"line":85},[31,2505,541],{"class":88},[31,2507,2508],{"class":33,"line":92},[31,2509,2510],{"class":59},"    OpenMP::OpenMP_CXX\n",[31,2512,2513],{"class":33,"line":98},[31,2514,101],{"class":59},[275,2516,757],{"id":2517},"using-c-7",[22,2519,2521],{"className":472,"code":2520,"language":474,"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,2522,2523,2530,2534,2547,2584,2589],{"__ignoreMap":27},[31,2524,2525,2527],{"class":33,"line":34},[31,2526,572],{"class":55},[31,2528,2529],{"class":575}," \u003Comp.h>\n",[31,2531,2532],{"class":33,"line":41},[31,2533,67],{"emptyLinePlaceholder":66},[31,2535,2536,2538,2541,2544],{"class":33,"line":47},[31,2537,481],{"class":55},[31,2539,2540],{"class":88}," omp",[31,2542,2543],{"class":88}," parallel",[31,2545,2546],{"class":88}," for\n",[31,2548,2549,2552,2555,2558,2561,2563,2566,2569,2572,2575,2578,2581],{"class":33,"line":52},[31,2550,2551],{"class":55},"for",[31,2553,2554],{"class":59}," (",[31,2556,2557],{"class":55},"int",[31,2559,2560],{"class":59}," i ",[31,2562,1200],{"class":55},[31,2564,2565],{"class":192}," 0",[31,2567,2568],{"class":59},"; i ",[31,2570,2571],{"class":55},"\u003C",[31,2573,2574],{"class":192}," 100",[31,2576,2577],{"class":59},"; ",[31,2579,2580],{"class":55},"++",[31,2582,2583],{"class":59},"i) {\n",[31,2585,2586],{"class":33,"line":63},[31,2587,2588],{"class":37},"    \u002F\u002F parallel work\n",[31,2590,2591],{"class":33,"line":70},[31,2592,515],{"class":59},[138,2594,2596],{"id":2595},"sophus","Sophus",[10,2598,2599],{},"Sophus is a Lie group and algebra library commonly used in SLAM and robot pose calculations.",[275,2601,657],{"id":2602},"install-10",[10,2604,2605],{},"Often, distribution repositories don't provide the appropriate version, so the common practice is to install from source or rely on dependency management by ROS or the project.",[10,2607,2608],{},"If system repositories are available, you can try searching:",[22,2610,2612],{"className":663,"code":2611,"language":665,"meta":27,"style":27},"apt search sophus\ndnf search sophus\n",[14,2613,2614,2625],{"__ignoreMap":27},[31,2615,2616,2619,2622],{"class":33,"line":34},[31,2617,2618],{"class":88},"apt",[31,2620,2621],{"class":575}," search",[31,2623,2624],{"class":575}," sophus\n",[31,2626,2627,2630,2632],{"class":33,"line":41},[31,2628,2629],{"class":88},"dnf",[31,2631,2621],{"class":575},[31,2633,2624],{"class":575},[275,2635,705],{"id":2636},"cmake-syntax-9",[10,2638,2639],{},"If already installed and providing CMake config:",[22,2641,2643],{"className":24,"code":2642,"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,2644,2645,2649,2653,2657,2664,2668,2678,2682,2687],{"__ignoreMap":27},[31,2646,2647],{"class":33,"line":34},[31,2648,38],{"class":37},[31,2650,2651],{"class":33,"line":41},[31,2652,44],{"class":37},[31,2654,2655],{"class":33,"line":47},[31,2656,38],{"class":37},[31,2658,2659,2661],{"class":33,"line":52},[31,2660,56],{"class":55},[31,2662,2663],{"class":59},"(Sophus REQUIRED)\n",[31,2665,2666],{"class":33,"line":63},[31,2667,67],{"emptyLinePlaceholder":66},[31,2669,2670,2672,2674,2676],{"class":33,"line":70},[31,2671,73],{"class":55},[31,2673,76],{"class":59},[31,2675,79],{"class":55},[31,2677,82],{"class":59},[31,2679,2680],{"class":33,"line":85},[31,2681,541],{"class":88},[31,2683,2684],{"class":33,"line":92},[31,2685,2686],{"class":59},"    Sophus::Sophus\n",[31,2688,2689],{"class":33,"line":98},[31,2690,101],{"class":59},[10,2692,2693],{},"Sophus often depends on Eigen. If your code also directly uses Eigen, you can explicitly write:",[22,2695,2697],{"className":24,"code":2696,"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,2698,2699,2705,2711,2715,2725,2729,2733,2737,2741],{"__ignoreMap":27},[31,2700,2701,2703],{"class":33,"line":34},[31,2702,56],{"class":55},[31,2704,60],{"class":59},[31,2706,2707,2709],{"class":33,"line":41},[31,2708,56],{"class":55},[31,2710,2663],{"class":59},[31,2712,2713],{"class":33,"line":47},[31,2714,67],{"emptyLinePlaceholder":66},[31,2716,2717,2719,2721,2723],{"class":33,"line":52},[31,2718,73],{"class":55},[31,2720,76],{"class":59},[31,2722,79],{"class":55},[31,2724,82],{"class":59},[31,2726,2727],{"class":33,"line":63},[31,2728,89],{"class":88},[31,2730,2731],{"class":33,"line":70},[31,2732,95],{"class":59},[31,2734,2735],{"class":33,"line":85},[31,2736,541],{"class":88},[31,2738,2739],{"class":33,"line":92},[31,2740,2686],{"class":59},[31,2742,2743],{"class":33,"line":98},[31,2744,101],{"class":59},[138,2746,2748],{"id":2747},"common-dependencies-quick-reference","Common dependencies quick reference",[208,2750,2751,2770],{},[211,2752,2753],{},[214,2754,2755,2758,2761,2764,2767],{},[217,2756,2757],{"align":219},"library",[217,2759,2760],{"align":219},"Ubuntu\u002FDebian",[217,2762,2763],{"align":219},"Fedora",[217,2765,2766],{"align":219},"CMake search",[217,2768,2769],{"align":219},"Common Link Targets",[225,2771,2772,2795,2819,2843,2871,2895,2919,2942,2966,2985],{},[214,2773,2774,2776,2781,2786,2791],{},[230,2775,240],{"align":219},[230,2777,2778],{"align":219},[14,2779,2780],{},"libeigen3-dev",[230,2782,2783],{"align":219},[14,2784,2785],{},"eigen3-devel",[230,2787,2788],{"align":219},[14,2789,2790],{},"find_package(Eigen3 REQUIRED)",[230,2792,2793],{"align":219},[14,2794,126],{},[214,2796,2797,2799,2804,2809,2814],{},[230,2798,244],{"align":219},[230,2800,2801],{"align":219},[14,2802,2803],{},"libopencv-dev",[230,2805,2806],{"align":219},[14,2807,2808],{},"opencv-devel",[230,2810,2811],{"align":219},[14,2812,2813],{},"find_package(OpenCV REQUIRED COMPONENTS ...)",[230,2815,2816,2818],{"align":219},[14,2817,385],{}," etc.",[214,2820,2821,2823,2828,2833,2838],{},[230,2822,1219],{"align":219},[230,2824,2825],{"align":219},[14,2826,2827],{},"libboost-all-dev",[230,2829,2830],{"align":219},[14,2831,2832],{},"boost-devel",[230,2834,2835],{"align":219},[14,2836,2837],{},"find_package(Boost REQUIRED COMPONENTS ...)",[230,2839,2840,2818],{"align":219},[14,2841,2842],{},"Boost::system",[214,2844,2845,2847,2852,2857,2862],{},[230,2846,1401],{"align":219},[230,2848,2849],{"align":219},[14,2850,2851],{},"libpcl-dev",[230,2853,2854],{"align":219},[14,2855,2856],{},"pcl-devel",[230,2858,2859],{"align":219},[14,2860,2861],{},"find_package(PCL REQUIRED COMPONENTS ...)",[230,2863,2864,2867,2868],{"align":219},[14,2865,2866],{},"${PCL_LIBRARIES}"," or ",[14,2869,2870],{},"PCL::common",[214,2872,2873,2875,2880,2885,2890],{},[230,2874,1694],{"align":219},[230,2876,2877],{"align":219},[14,2878,2879],{},"libfmt-dev",[230,2881,2882],{"align":219},[14,2883,2884],{},"fmt-devel",[230,2886,2887],{"align":219},[14,2888,2889],{},"find_package(fmt REQUIRED)",[230,2891,2892],{"align":219},[14,2893,2894],{},"fmt::fmt",[214,2896,2897,2899,2904,2909,2914],{},[230,2898,1848],{"align":219},[230,2900,2901],{"align":219},[14,2902,2903],{},"libspdlog-dev",[230,2905,2906],{"align":219},[14,2907,2908],{},"spdlog-devel",[230,2910,2911],{"align":219},[14,2912,2913],{},"find_package(spdlog REQUIRED)",[230,2915,2916],{"align":219},[14,2917,2918],{},"spdlog::spdlog",[214,2920,2921,2923,2928,2933,2938],{},[230,2922,1989],{"align":219},[230,2924,2925],{"align":219},[14,2926,2927],{},"libyaml-cpp-dev",[230,2929,2930],{"align":219},[14,2931,2932],{},"yaml-cpp-devel",[230,2934,2935],{"align":219},[14,2936,2937],{},"find_package(yaml-cpp REQUIRED)",[230,2939,2940],{"align":219},[14,2941,2096],{},[214,2943,2944,2946,2951,2956,2961],{},[230,2945,2100],{"align":219},[230,2947,2948],{"align":219},[14,2949,2950],{},"nlohmann-json3-dev",[230,2952,2953],{"align":219},[14,2954,2955],{},"json-devel",[230,2957,2958],{"align":219},[14,2959,2960],{},"find_package(nlohmann_json REQUIRED)",[230,2962,2963],{"align":219},[14,2964,2965],{},"nlohmann_json::nlohmann_json",[214,2967,2968,2970,2973,2975,2980],{},[230,2969,2248],{"align":219},[230,2971,2972],{"align":219},"Usually no need to install separately",[230,2974,2972],{"align":219},[230,2976,2977],{"align":219},[14,2978,2979],{},"find_package(Threads REQUIRED)",[230,2981,2982],{"align":219},[14,2983,2984],{},"Threads::Threads",[214,2986,2987,2989,2994,2999,3004],{},[230,2988,2418],{"align":219},[230,2990,2991],{"align":219},[14,2992,2993],{},"libomp-dev",[230,2995,2996],{"align":219},[14,2997,2998],{},"libgomp",[230,3000,3001],{"align":219},[14,3002,3003],{},"find_package(OpenMP REQUIRED)",[230,3005,3006],{"align":219},[14,3007,3008],{},"OpenMP::OpenMP_CXX",[10,3010,3011],{},"Package names may vary slightly across different distributions and versions. If installation fails, first try using:",[22,3013,3015],{"className":663,"code":3014,"language":665,"meta":27,"style":27},"apt search \u003C关键字>\ndnf search \u003C关键字>\n",[14,3016,3017,3035],{"__ignoreMap":27},[31,3018,3019,3021,3023,3026,3029,3032],{"class":33,"line":34},[31,3020,2618],{"class":88},[31,3022,2621],{"class":575},[31,3024,3025],{"class":55}," \u003C",[31,3027,3028],{"class":575},"关键",[31,3030,3031],{"class":59},"字",[31,3033,3034],{"class":55},">\n",[31,3036,3037,3039,3041,3043,3045,3047],{"class":33,"line":41},[31,3038,2629],{"class":88},[31,3040,2621],{"class":575},[31,3042,3025],{"class":55},[31,3044,3028],{"class":575},[31,3046,3031],{"class":59},[31,3048,3034],{"class":55},[10,3050,3051],{},"Confirming the package name.",[138,3053,3055],{"id":3054},"incorporating-both-eigen-and-opencv-into-a-single-module-involves-handling-dependencies-for-two-distinct-yet-often-complementary-libraries-eigen-is-primarily-used-for-linear-algebra-and-matrix-operations-while-opencv-focuses-on-computer-vision-and-image-processing","Incorporating both Eigen and OpenCV into a single module involves handling dependencies for two distinct, yet often complementary, libraries. Eigen is primarily used for linear algebra and matrix operations, while OpenCV focuses on computer vision and image processing.",[10,3057,3058],{},"Here’s a general guide for integrating them into a C++ or Python project:",[275,3060,3062,3063],{"id":3061},"_1-environment-setup-installation","1. ",[3064,3065,3066],"strong",{},"Environment Setup & Installation",[3068,3069,3070,3096],"ul",{},[109,3071,3072,3075,3076,241,3078,3081,3082,2867,3085,3088,3089,3092,3093,114],{},[3064,3073,3074],{},"C++:"," Both libraries must be installed and findable by your build system. You can install them via system package managers (e.g., ",[14,3077,2618],{},[14,3079,3080],{},"brew",") or build them from source. Most modern C++ projects use a package manager like ",[3064,3083,3084],{},"vcpkg",[3064,3086,3087],{},"Conan",", or rely on ",[3064,3090,3091],{},"CMake"," to locate them via ",[14,3094,3095],{},"find_package()",[109,3097,3098,3101,3102],{},[3064,3099,3100],{},"Python:"," Use pip for installation:\n",[22,3103,3105],{"className":663,"code":3104,"language":665,"meta":27,"style":27},"pip install numpy  # Eigen is typically used via NumPy bindings in Python\npip install opencv-python\n",[14,3106,3107,3120],{"__ignoreMap":27},[31,3108,3109,3112,3114,3117],{"class":33,"line":34},[31,3110,3111],{"class":88},"pip",[31,3113,678],{"class":575},[31,3115,3116],{"class":575}," numpy",[31,3118,3119],{"class":37},"  # Eigen is typically used via NumPy bindings in Python\n",[31,3121,3122,3124,3126],{"class":33,"line":41},[31,3123,3111],{"class":88},[31,3125,678],{"class":575},[31,3127,3128],{"class":575}," opencv-python\n",[275,3130,3132,3133],{"id":3131},"_2-project-configuration-cmake-example","2. ",[3064,3134,3135],{},"Project Configuration (CMake Example)",[10,3137,3138,3139,3141],{},"For a C++ project using CMake, your ",[14,3140,136],{}," would include directives to find and link both libraries:",[22,3143,3145],{"className":24,"code":3144,"language":26,"meta":27,"style":27},"cmake_minimum_required(VERSION 3.10)\nproject(MyProject)\n\n# Find the packages\nfind_package(Eigen3 3.3 REQUIRED)\nfind_package(OpenCV 4.0 REQUIRED)\n\n# Define your executable or library\nadd_executable(my_module main.cpp)\n\n# Link against both\ntarget_link_libraries(my_module PRIVATE ${OpenCV_LIBS} Eigen3::Eigen)\n\n# Ensure include directories are available\ntarget_include_directories(my_module PRIVATE\n    ${OpenCV_INCLUDE_DIRS}\n    # Eigen's include directory is handled automatically by the imported target\n)\n",[14,3146,3147,3160,3168,3172,3177,3184,3191,3195,3200,3208,3212,3217,3231,3235,3240,3249,3254,3259],{"__ignoreMap":27},[31,3148,3149,3152,3154,3157],{"class":33,"line":34},[31,3150,3151],{"class":55},"cmake_minimum_required",[31,3153,76],{"class":59},[31,3155,3156],{"class":88},"VERSION",[31,3158,3159],{"class":59}," 3.10)\n",[31,3161,3162,3165],{"class":33,"line":41},[31,3163,3164],{"class":55},"project",[31,3166,3167],{"class":59},"(MyProject)\n",[31,3169,3170],{"class":33,"line":47},[31,3171,67],{"emptyLinePlaceholder":66},[31,3173,3174],{"class":33,"line":52},[31,3175,3176],{"class":37},"# Find the packages\n",[31,3178,3179,3181],{"class":33,"line":63},[31,3180,56],{"class":55},[31,3182,3183],{"class":59},"(Eigen3 3.3 REQUIRED)\n",[31,3185,3186,3188],{"class":33,"line":70},[31,3187,56],{"class":55},[31,3189,3190],{"class":59},"(OpenCV 4.0 REQUIRED)\n",[31,3192,3193],{"class":33,"line":85},[31,3194,67],{"emptyLinePlaceholder":66},[31,3196,3197],{"class":33,"line":92},[31,3198,3199],{"class":37},"# Define your executable or library\n",[31,3201,3202,3205],{"class":33,"line":98},[31,3203,3204],{"class":55},"add_executable",[31,3206,3207],{"class":59},"(my_module main.cpp)\n",[31,3209,3210],{"class":33,"line":1052},[31,3211,67],{"emptyLinePlaceholder":66},[31,3213,3214],{"class":33,"line":1058},[31,3215,3216],{"class":37},"# Link against both\n",[31,3218,3219,3221,3224,3226,3229],{"class":33,"line":1064},[31,3220,73],{"class":55},[31,3222,3223],{"class":59},"(my_module ",[31,3225,413],{"class":88},[31,3227,3228],{"class":55}," ${OpenCV_LIBS}",[31,3230,338],{"class":59},[31,3232,3233],{"class":33,"line":1603},[31,3234,67],{"emptyLinePlaceholder":66},[31,3236,3237],{"class":33,"line":1609},[31,3238,3239],{"class":37},"# Ensure include directories are available\n",[31,3241,3242,3244,3246],{"class":33,"line":1614},[31,3243,1590],{"class":55},[31,3245,3223],{"class":59},[31,3247,3248],{"class":88},"PRIVATE\n",[31,3250,3251],{"class":33,"line":1619},[31,3252,3253],{"class":55},"    ${OpenCV_INCLUDE_DIRS}\n",[31,3255,3256],{"class":33,"line":1631},[31,3257,3258],{"class":37},"    # Eigen's include directory is handled automatically by the imported target\n",[31,3260,3261],{"class":33,"line":1636},[31,3262,101],{"class":59},[275,3264,3266,3267],{"id":3265},"_3-code-usage-c-example","3. ",[3064,3268,3269],{},"Code Usage (C++ Example)",[10,3271,3272,3273,3275],{},"In your source code, you can freely mix types and functions from both libraries. A common use case is converting data between OpenCV's ",[14,3274,923],{}," and Eigen's matrices.",[22,3277,3279],{"className":472,"code":3278,"language":474,"meta":27,"style":27},"#include \u003Copencv2\u002Fopencv.hpp>\n#include \u003CEigen\u002FDense>\n#include \u003Ciostream>\n\nint main() {\n    \u002F\u002F 1. Create an OpenCV image\n    cv::Mat cv_img(3, 3, CV_64F, cv::Scalar(0));\n    cv_img.at\u003Cdouble>(0, 0) = 1.0;\n\n    \u002F\u002F 2. Convert OpenCV Mat to Eigen Matrix\n    Eigen::Map\u003CEigen::Matrix\u003Cdouble, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>\n        eigen_map(cv_img.ptr\u003Cdouble>(), cv_img.rows, cv_img.cols);\n    Eigen::MatrixXd eigen_matrix = eigen_map;\n\n    \u002F\u002F 3. Perform an Eigen operation (e.g., matrix multiplication)\n    Eigen::MatrixXd result = eigen_matrix * eigen_matrix.transpose();\n\n    \u002F\u002F 4. Convert the result back to OpenCV Mat for display\u002Fsaving\n    cv::Mat cv_result(result.rows(), result.cols(), CV_64F);\n    Eigen::Map\u003CEigen::Matrix\u003Cdouble, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>\n        result_map(cv_result.ptr\u003Cdouble>(), result.rows(), result.cols());\n    result_map = result;\n\n    \u002F\u002F Use OpenCV to print or process the result\n    std::cout \u003C\u003C \"OpenCV Mat result:\\n\" \u003C\u003C cv_result \u003C\u003C std::endl;\n\n    return 0;\n}\n",[14,3280,3281,3287,3293,3300,3304,3314,3319,3357,3383,3387,3392,3429,3442,3454,3458,3463,3486,3490,3495,3519,3550,3572,3583,3588,3594,3629,3634,3644],{"__ignoreMap":27},[31,3282,3283,3285],{"class":33,"line":34},[31,3284,572],{"class":55},[31,3286,1185],{"class":575},[31,3288,3289,3291],{"class":33,"line":41},[31,3290,572],{"class":55},[31,3292,576],{"class":575},[31,3294,3295,3297],{"class":33,"line":47},[31,3296,572],{"class":55},[31,3298,3299],{"class":575}," \u003Ciostream>\n",[31,3301,3302],{"class":33,"line":52},[31,3303,67],{"emptyLinePlaceholder":66},[31,3305,3306,3308,3311],{"class":33,"line":63},[31,3307,2557],{"class":55},[31,3309,3310],{"class":88}," main",[31,3312,3313],{"class":59},"() {\n",[31,3315,3316],{"class":33,"line":70},[31,3317,3318],{"class":37},"    \u002F\u002F 1. Create an OpenCV image\n",[31,3320,3321,3324,3327,3330,3332,3335,3337,3339,3342,3344,3346,3349,3351,3354],{"class":33,"line":85},[31,3322,3323],{"class":88},"    cv",[31,3325,3326],{"class":59},"::Mat ",[31,3328,3329],{"class":88},"cv_img",[31,3331,76],{"class":59},[31,3333,3334],{"class":192},"3",[31,3336,241],{"class":59},[31,3338,3334],{"class":192},[31,3340,3341],{"class":59},", CV_64F, ",[31,3343,1194],{"class":88},[31,3345,596],{"class":59},[31,3347,3348],{"class":88},"Scalar",[31,3350,76],{"class":59},[31,3352,3353],{"class":192},"0",[31,3355,3356],{"class":59},"));\n",[31,3358,3359,3362,3365,3367,3369,3371,3373,3376,3378,3381],{"class":33,"line":92},[31,3360,3361],{"class":59},"    cv_img.at",[31,3363,3364],{"class":55},"\u003Cdouble>",[31,3366,76],{"class":59},[31,3368,3353],{"class":192},[31,3370,241],{"class":59},[31,3372,3353],{"class":192},[31,3374,3375],{"class":59},") ",[31,3377,1200],{"class":55},[31,3379,3380],{"class":192}," 1.0",[31,3382,2244],{"class":59},[31,3384,3385],{"class":33,"line":98},[31,3386,67],{"emptyLinePlaceholder":66},[31,3388,3389],{"class":33,"line":1052},[31,3390,3391],{"class":37},"    \u002F\u002F 2. Convert OpenCV Mat to Eigen Matrix\n",[31,3393,3394,3397,3400,3402,3404,3407,3410,3412,3414,3417,3419,3421,3423,3426],{"class":33,"line":1058},[31,3395,3396],{"class":88},"    Eigen",[31,3398,3399],{"class":59},"::Map",[31,3401,2571],{"class":55},[31,3403,593],{"class":88},[31,3405,3406],{"class":59},"::Matrix",[31,3408,3409],{"class":55},"\u003Cdouble",[31,3411,241],{"class":59},[31,3413,593],{"class":88},[31,3415,3416],{"class":59},"::Dynamic, ",[31,3418,593],{"class":88},[31,3420,3416],{"class":59},[31,3422,593],{"class":88},[31,3424,3425],{"class":59},"::RowMajor",[31,3427,3428],{"class":55},">>\n",[31,3430,3431,3434,3437,3439],{"class":33,"line":1064},[31,3432,3433],{"class":88},"        eigen_map",[31,3435,3436],{"class":59},"(cv_img.ptr",[31,3438,3364],{"class":55},[31,3440,3441],{"class":59},"(), cv_img.rows, cv_img.cols);\n",[31,3443,3444,3446,3449,3451],{"class":33,"line":1603},[31,3445,3396],{"class":88},[31,3447,3448],{"class":59},"::MatrixXd eigen_matrix ",[31,3450,1200],{"class":55},[31,3452,3453],{"class":59}," eigen_map;\n",[31,3455,3456],{"class":33,"line":1609},[31,3457,67],{"emptyLinePlaceholder":66},[31,3459,3460],{"class":33,"line":1614},[31,3461,3462],{"class":37},"    \u002F\u002F 3. Perform an Eigen operation (e.g., matrix multiplication)\n",[31,3464,3465,3467,3470,3472,3475,3478,3481,3484],{"class":33,"line":1619},[31,3466,3396],{"class":88},[31,3468,3469],{"class":59},"::MatrixXd result ",[31,3471,1200],{"class":55},[31,3473,3474],{"class":59}," eigen_matrix ",[31,3476,3477],{"class":55},"*",[31,3479,3480],{"class":59}," eigen_matrix.",[31,3482,3483],{"class":88},"transpose",[31,3485,510],{"class":59},[31,3487,3488],{"class":33,"line":1631},[31,3489,67],{"emptyLinePlaceholder":66},[31,3491,3492],{"class":33,"line":1636},[31,3493,3494],{"class":37},"    \u002F\u002F 4. Convert the result back to OpenCV Mat for display\u002Fsaving\n",[31,3496,3497,3499,3501,3504,3507,3510,3513,3516],{"class":33,"line":1642},[31,3498,3323],{"class":88},[31,3500,3326],{"class":59},[31,3502,3503],{"class":88},"cv_result",[31,3505,3506],{"class":59},"(result.",[31,3508,3509],{"class":88},"rows",[31,3511,3512],{"class":59},"(), result.",[31,3514,3515],{"class":88},"cols",[31,3517,3518],{"class":59},"(), CV_64F);\n",[31,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548],{"class":33,"line":3521},20,[31,3523,3396],{"class":88},[31,3525,3399],{"class":59},[31,3527,2571],{"class":55},[31,3529,593],{"class":88},[31,3531,3406],{"class":59},[31,3533,3409],{"class":55},[31,3535,241],{"class":59},[31,3537,593],{"class":88},[31,3539,3416],{"class":59},[31,3541,593],{"class":88},[31,3543,3416],{"class":59},[31,3545,593],{"class":88},[31,3547,3425],{"class":59},[31,3549,3428],{"class":55},[31,3551,3553,3556,3559,3561,3563,3565,3567,3569],{"class":33,"line":3552},21,[31,3554,3555],{"class":88},"        result_map",[31,3557,3558],{"class":59},"(cv_result.ptr",[31,3560,3364],{"class":55},[31,3562,3512],{"class":59},[31,3564,3509],{"class":88},[31,3566,3512],{"class":59},[31,3568,3515],{"class":88},[31,3570,3571],{"class":59},"());\n",[31,3573,3575,3578,3580],{"class":33,"line":3574},22,[31,3576,3577],{"class":59},"    result_map ",[31,3579,1200],{"class":55},[31,3581,3582],{"class":59}," result;\n",[31,3584,3586],{"class":33,"line":3585},23,[31,3587,67],{"emptyLinePlaceholder":66},[31,3589,3591],{"class":33,"line":3590},24,[31,3592,3593],{"class":37},"    \u002F\u002F Use OpenCV to print or process the result\n",[31,3595,3597,3600,3603,3606,3609,3612,3615,3618,3621,3623,3626],{"class":33,"line":3596},25,[31,3598,3599],{"class":88},"    std",[31,3601,3602],{"class":59},"::cout ",[31,3604,3605],{"class":55},"\u003C\u003C",[31,3607,3608],{"class":575}," \"OpenCV Mat result:",[31,3610,3611],{"class":192},"\\n",[31,3613,3614],{"class":575},"\"",[31,3616,3617],{"class":55}," \u003C\u003C",[31,3619,3620],{"class":59}," cv_result ",[31,3622,3605],{"class":55},[31,3624,3625],{"class":88}," std",[31,3627,3628],{"class":59},"::endl;\n",[31,3630,3632],{"class":33,"line":3631},26,[31,3633,67],{"emptyLinePlaceholder":66},[31,3635,3637,3640,3642],{"class":33,"line":3636},27,[31,3638,3639],{"class":55},"    return",[31,3641,2565],{"class":192},[31,3643,2244],{"class":59},[31,3645,3647],{"class":33,"line":3646},28,[31,3648,515],{"class":59},[275,3650,3652,3653],{"id":3651},"_4-code-usage-python-example","4. ",[3064,3654,3655],{},"Code Usage (Python Example)",[10,3657,3658],{},"In Python, the integration is seamless because both libraries use NumPy arrays as their primary dense data structure.",[22,3660,3664],{"className":3661,"code":3662,"language":3663,"meta":27,"style":27},"language-python shiki shiki-themes github-light github-dark","import numpy as np\nimport cv2\n\n# 1. Create a NumPy array (Eigen-like linear algebra via NumPy)\neigen_matrix = np.array([[1.0, 2.0], [3.0, 4.0]])\n\n# 2. Use it directly with OpenCV\n# OpenCV functions accept NumPy arrays\nprocessed = cv2.GaussianBlur(eigen_matrix.astype(np.float32), (5, 5), 0)\n\n# 3. Perform Eigen\u002FNumPy-style operations\nresult = np.linalg.inv(eigen_matrix)  # Matrix inversion\n\nprint(\"NumPy array result:\\n\", result)\n","python",[14,3665,3666,3680,3687,3691,3696,3725,3729,3734,3739,3763,3767,3772,3785,3789],{"__ignoreMap":27},[31,3667,3668,3671,3674,3677],{"class":33,"line":34},[31,3669,3670],{"class":55},"import",[31,3672,3673],{"class":59}," numpy ",[31,3675,3676],{"class":55},"as",[31,3678,3679],{"class":59}," np\n",[31,3681,3682,3684],{"class":33,"line":41},[31,3683,3670],{"class":55},[31,3685,3686],{"class":59}," cv2\n",[31,3688,3689],{"class":33,"line":47},[31,3690,67],{"emptyLinePlaceholder":66},[31,3692,3693],{"class":33,"line":52},[31,3694,3695],{"class":37},"# 1. Create a NumPy array (Eigen-like linear algebra via NumPy)\n",[31,3697,3698,3701,3703,3706,3708,3710,3712,3715,3717,3719,3722],{"class":33,"line":63},[31,3699,3700],{"class":59},"eigen_matrix ",[31,3702,1200],{"class":55},[31,3704,3705],{"class":59}," np.array([[",[31,3707,788],{"class":192},[31,3709,241],{"class":59},[31,3711,793],{"class":192},[31,3713,3714],{"class":59},"], [",[31,3716,798],{"class":192},[31,3718,241],{"class":59},[31,3720,3721],{"class":192},"4.0",[31,3723,3724],{"class":59},"]])\n",[31,3726,3727],{"class":33,"line":70},[31,3728,67],{"emptyLinePlaceholder":66},[31,3730,3731],{"class":33,"line":85},[31,3732,3733],{"class":37},"# 2. Use it directly with OpenCV\n",[31,3735,3736],{"class":33,"line":92},[31,3737,3738],{"class":37},"# OpenCV functions accept NumPy arrays\n",[31,3740,3741,3744,3746,3749,3752,3754,3756,3759,3761],{"class":33,"line":98},[31,3742,3743],{"class":59},"processed ",[31,3745,1200],{"class":55},[31,3747,3748],{"class":59}," cv2.GaussianBlur(eigen_matrix.astype(np.float32), (",[31,3750,3751],{"class":192},"5",[31,3753,241],{"class":59},[31,3755,3751],{"class":192},[31,3757,3758],{"class":59},"), ",[31,3760,3353],{"class":192},[31,3762,101],{"class":59},[31,3764,3765],{"class":33,"line":1052},[31,3766,67],{"emptyLinePlaceholder":66},[31,3768,3769],{"class":33,"line":1058},[31,3770,3771],{"class":37},"# 3. Perform Eigen\u002FNumPy-style operations\n",[31,3773,3774,3777,3779,3782],{"class":33,"line":1064},[31,3775,3776],{"class":59},"result ",[31,3778,1200],{"class":55},[31,3780,3781],{"class":59}," np.linalg.inv(eigen_matrix)  ",[31,3783,3784],{"class":37},"# Matrix inversion\n",[31,3786,3787],{"class":33,"line":1603},[31,3788,67],{"emptyLinePlaceholder":66},[31,3790,3791,3794,3796,3799,3801,3803],{"class":33,"line":1609},[31,3792,3793],{"class":192},"print",[31,3795,76],{"class":59},[31,3797,3798],{"class":575},"\"NumPy array result:",[31,3800,3611],{"class":192},[31,3802,3614],{"class":575},[31,3804,3805],{"class":59},", result)\n",[275,3807,3809],{"id":3808},"key-points",[3064,3810,3811],{},"Key Points:",[3068,3813,3814,3828,3836,3854],{},[109,3815,3816,3818,3819,2554,3822,241,3824,3827],{},[3064,3817,3074],{}," The primary challenge is ensuring both libraries are correctly found and linked by the build system. Using ",[3064,3820,3821],{},"modern CMake targets",[14,3823,126],{},[14,3825,3826],{},"${OpenCV_LIBS}",") is the recommended approach.",[109,3829,3830,3832,3833,3835],{},[3064,3831,3100],{}," The ecosystem is unified around NumPy arrays. Conversion between ",[14,3834,923],{}," and Eigen matrices is straightforward in C++, and nearly automatic in Python.",[109,3837,3838,3841,3842,3845,3846,3849,3850,3853],{},[3064,3839,3840],{},"Type Conversion:"," Be mindful of data types (e.g., ",[14,3843,3844],{},"CV_64F"," in OpenCV corresponds to ",[14,3847,3848],{},"double"," in Eigen). Ensure matrices are in a compatible format (like row-major for OpenCV and Eigen's ",[14,3851,3852],{},"RowMajor"," mapping).",[109,3855,3856,3859,3860,127,3867,114],{},[3064,3857,3858],{},"Documentation:"," Refer to the official tutorials for both libraries: ",[3861,3862,3866],"a",{"href":3863,"rel":3864},"https:\u002F\u002Feigen.tuxfamily.org\u002F",[3865],"nofollow","Eigen Tutorials",[3861,3868,3871],{"href":3869,"rel":3870},"https:\u002F\u002Fdocs.opencv.org\u002F",[3865],"OpenCV Tutorials",[10,3873,3874],{},"This combination is powerful for robotics, computer vision, and scientific computing projects where efficient linear algebra is needed alongside image processing.",[10,3876,3877,3878,3880],{},"For example ",[14,3879,468],{}," simultaneously using Eigen and OpenCV:",[22,3882,3884],{"className":24,"code":3883,"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,3885,3886,3890,3894,3898,3904,3911,3915,3925,3929,3933,3937,3941,3945,3949],{"__ignoreMap":27},[31,3887,3888],{"class":33,"line":34},[31,3889,38],{"class":37},[31,3891,3892],{"class":33,"line":41},[31,3893,44],{"class":37},[31,3895,3896],{"class":33,"line":47},[31,3897,38],{"class":37},[31,3899,3900,3902],{"class":33,"line":52},[31,3901,56],{"class":55},[31,3903,60],{"class":59},[31,3905,3906,3908],{"class":33,"line":63},[31,3907,56],{"class":55},[31,3909,3910],{"class":59},"(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs)\n",[31,3912,3913],{"class":33,"line":70},[31,3914,67],{"emptyLinePlaceholder":66},[31,3916,3917,3919,3921,3923],{"class":33,"line":85},[31,3918,73],{"class":55},[31,3920,76],{"class":59},[31,3922,79],{"class":55},[31,3924,82],{"class":59},[31,3926,3927],{"class":33,"line":92},[31,3928,89],{"class":88},[31,3930,3931],{"class":33,"line":98},[31,3932,95],{"class":59},[31,3934,3935],{"class":33,"line":1052},[31,3936,541],{"class":88},[31,3938,3939],{"class":33,"line":1058},[31,3940,1044],{"class":59},[31,3942,3943],{"class":33,"line":1064},[31,3944,1049],{"class":59},[31,3946,3947],{"class":33,"line":1603},[31,3948,1055],{"class":59},[31,3950,3951],{"class":33,"line":1609},[31,3952,101],{"class":59},[10,3954,3955,3956,521],{},"If the header file does not expose Eigen types, you can also change Eigen to ",[14,3957,413],{},[22,3959,3961],{"className":24,"code":3960,"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,3962,3963,3973,3977,3981,3985,3989,3993],{"__ignoreMap":27},[31,3964,3965,3967,3969,3971],{"class":33,"line":34},[31,3966,73],{"class":55},[31,3968,76],{"class":59},[31,3970,79],{"class":55},[31,3972,82],{"class":59},[31,3974,3975],{"class":33,"line":41},[31,3976,541],{"class":88},[31,3978,3979],{"class":33,"line":47},[31,3980,95],{"class":59},[31,3982,3983],{"class":33,"line":52},[31,3984,1044],{"class":59},[31,3986,3987],{"class":33,"line":63},[31,3988,1049],{"class":59},[31,3990,3991],{"class":33,"line":70},[31,3992,1055],{"class":59},[31,3994,3995],{"class":33,"line":85},[31,3996,101],{"class":59},[138,3998,4000],{"id":3999},"not-recommended-way-of-writing","Not recommended way of writing",[275,4002,4004],{"id":4003},"not-recommended-top-level-centralized-search-for-all-libraries","Not Recommended: Top-level centralized search for all libraries",[22,4006,4008],{"className":24,"code":4007,"language":26,"meta":27,"style":27},"# 顶层 CMakeLists.txt\nfind_package(Eigen3 REQUIRED)\nfind_package(OpenCV REQUIRED)\nfind_package(PCL REQUIRED)\n",[14,4009,4010,4015,4021,4027],{"__ignoreMap":27},[31,4011,4012],{"class":33,"line":34},[31,4013,4014],{"class":37},"# 顶层 CMakeLists.txt\n",[31,4016,4017,4019],{"class":33,"line":41},[31,4018,56],{"class":55},[31,4020,60],{"class":59},[31,4022,4023,4025],{"class":33,"line":47},[31,4024,56],{"class":55},[31,4026,182],{"class":59},[31,4028,4029,4031],{"class":33,"line":52},[31,4030,56],{"class":55},[31,4032,4033],{"class":59},"(PCL REQUIRED)\n",[10,4035,4036],{},"Question",[106,4038,4039,4042,4045,4048],{},[109,4040,4041],{},"The top level is getting messier.",[109,4043,4044],{},"Not sure which module actually uses which library.",[109,4046,4047],{},"When deleting modules, it's easy to accidentally miss dependencies.",[109,4049,4050],{},"Newcomers struggle to understand dependencies when reading projects.",[275,4052,4054],{"id":4053},"not-recommended-global-include","Not Recommended: Global Include",[22,4056,4058],{"className":24,"code":4057,"language":26,"meta":27,"style":27},"include_directories(${OpenCV_INCLUDE_DIRS})\nlink_libraries(${OpenCV_LIBS})\n",[14,4059,4060,4072],{"__ignoreMap":27},[31,4061,4062,4065,4067,4070],{"class":33,"line":34},[31,4063,4064],{"class":55},"include_directories",[31,4066,76],{"class":59},[31,4068,4069],{"class":55},"${OpenCV_INCLUDE_DIRS}",[31,4071,101],{"class":59},[31,4073,4074,4077,4079,4081],{"class":33,"line":41},[31,4075,4076],{"class":55},"link_libraries",[31,4078,76],{"class":59},[31,4080,3826],{"class":55},[31,4082,101],{"class":59},[10,4084,4036],{},[106,4086,4087,4090,4093],{},[109,4088,4089],{},"Affects all targets.",[109,4091,4092],{},"Dependencies are unclear.",[109,4094,4095],{},"This could accidentally introduce include ordering issues.",[10,4097,4098],{},"Modern CMake Recommendations:",[22,4100,4102],{"className":24,"code":4101,"language":26,"meta":27,"style":27},"target_link_libraries(my_target\n  PRIVATE\n    opencv_core\n)\n",[14,4103,4104,4111,4115,4119],{"__ignoreMap":27},[31,4105,4106,4108],{"class":33,"line":34},[31,4107,73],{"class":55},[31,4109,4110],{"class":59},"(my_target\n",[31,4112,4113],{"class":33,"line":41},[31,4114,541],{"class":88},[31,4116,4117],{"class":33,"line":47},[31,4118,1044],{"class":59},[31,4120,4121],{"class":33,"line":52},[31,4122,101],{"class":59},[10,4124,4125],{},"If a library provides an imported target, include paths and link libraries will automatically propagate with the target.",[138,4127,4129,4130],{"id":4128},"library-not-found-in-find_package","library not found in ",[14,4131,56],{},[275,4133,4135],{"id":4134},"step-1-check-if-system-packages-are-installed","Step 1: Check if system packages are installed.",[22,4137,4139],{"className":663,"code":4138,"language":665,"meta":27,"style":27},"dpkg -l | grep eigen\nrpm -qa | grep eigen\n",[14,4140,4141,4158],{"__ignoreMap":27},[31,4142,4143,4146,4149,4152,4155],{"class":33,"line":34},[31,4144,4145],{"class":88},"dpkg",[31,4147,4148],{"class":192}," -l",[31,4150,4151],{"class":55}," |",[31,4153,4154],{"class":88}," grep",[31,4156,4157],{"class":575}," eigen\n",[31,4159,4160,4163,4166,4168,4170],{"class":33,"line":41},[31,4161,4162],{"class":88},"rpm",[31,4164,4165],{"class":192}," -qa",[31,4167,4151],{"class":55},[31,4169,4154],{"class":88},[31,4171,4157],{"class":575},[275,4173,4175],{"id":4174},"step-2-check-that-cmake-can-detect-the-config-file","Step 2: Check that CMake can detect the config file",[10,4177,4178],{},"Common file names:",[22,4180,4185],{"className":4181,"code":4183,"language":4184,"meta":27},[4182],"language-text","Eigen3Config.cmake\nOpenCVConfig.cmake\nPCLConfig.cmake\nfmtConfig.cmake\n","text",[14,4186,4183],{"__ignoreMap":27},[275,4188,4190],{"id":4189},"step-3-manually-specify-search-path","Step 3: Manually Specify Search Path",[10,4192,4193],{},"If the library is installed in a non-standard directory, you can add the following during configure:",[22,4195,4197],{"className":663,"code":4196,"language":665,"meta":27,"style":27},"cmake --preset linux-debug -DCMAKE_PREFIX_PATH=\u002Fopt\u002Fsome_library\n",[14,4198,4199],{"__ignoreMap":27},[31,4200,4201,4203,4206,4209],{"class":33,"line":34},[31,4202,26],{"class":88},[31,4204,4205],{"class":192}," --preset",[31,4207,4208],{"class":575}," linux-debug",[31,4210,4211],{"class":192}," -DCMAKE_PREFIX_PATH=\u002Fopt\u002Fsome_library\n",[10,4213,4214],{},"or add in the preset:",[22,4216,4220],{"className":4217,"code":4218,"language":4219,"meta":27,"style":27},"language-json shiki shiki-themes github-light github-dark","\"CMAKE_PREFIX_PATH\": \"\u002Fopt\u002Fsome_library\"\n","json",[14,4221,4222],{"__ignoreMap":27},[31,4223,4224,4227,4230],{"class":33,"line":34},[31,4225,4226],{"class":575},"\"CMAKE_PREFIX_PATH\"",[31,4228,4229],{"class":59},": ",[31,4231,4232],{"class":575},"\"\u002Fopt\u002Fsome_library\"\n",[10,4234,4235],{},"Multiple paths can be separated by semicolons:",[22,4237,4239],{"className":4217,"code":4238,"language":4219,"meta":27,"style":27},"\"CMAKE_PREFIX_PATH\": \"\u002Fopt\u002Flib_a;\u002Fopt\u002Flib_b\"\n",[14,4240,4241],{"__ignoreMap":27},[31,4242,4243,4245,4247],{"class":33,"line":34},[31,4244,4226],{"class":575},[31,4246,4229],{"class":59},[31,4248,4249],{"class":575},"\"\u002Fopt\u002Flib_a;\u002Fopt\u002Flib_b\"\n",[275,4251,4253],{"id":4252},"step-4-check-cmake-error-messages","Step 4: Check CMake error messages",[10,4255,4256],{},"CMake will usually tell you which config file is missing, for example:",[22,4258,4261],{"className":4259,"code":4260,"language":4184,"meta":27},[4182],"Could not find a package configuration file provided by \"OpenCV\"\n",[14,4262,4260],{"__ignoreMap":27},[10,4264,4265],{},"First, check in this case:",[106,4267,4268,4271,4274],{},[109,4269,4270],{},"Whether the development package is installed.",[109,4272,4273],{},"Is the package name correct?",[109,4275,4276],{},"Whether it was installed to a non-standard path.",[4278,4279,4280],"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":4282},[4283,4288,4290,4296,4303,4308,4313,4318,4323,4327,4332,4337,4342,4346,4347,4358,4362],{"id":140,"depth":41,"text":4284,"children":4285},"find_package Basic Grammar",[4286,4287],{"id":277,"depth":47,"text":260},{"id":355,"depth":47,"text":270},{"id":401,"depth":41,"text":4289},"In target_link_libraries, dependency visibility",{"id":650,"depth":41,"text":240,"children":4291},[4292,4293,4294,4295],{"id":656,"depth":47,"text":657},{"id":704,"depth":47,"text":705},{"id":756,"depth":47,"text":757},{"id":804,"depth":47,"text":805},{"id":850,"depth":41,"text":851,"children":4297},[4298,4299,4300,4301,4302],{"id":857,"depth":47,"text":657},{"id":896,"depth":47,"text":897},{"id":996,"depth":47,"text":997},{"id":1128,"depth":47,"text":1129},{"id":1173,"depth":47,"text":757},{"id":1218,"depth":41,"text":1219,"children":4304},[4305,4306,4307],{"id":1231,"depth":47,"text":657},{"id":1292,"depth":47,"text":705},{"id":1357,"depth":47,"text":757},{"id":1400,"depth":41,"text":1401,"children":4309},[4310,4311,4312],{"id":1407,"depth":47,"text":657},{"id":1446,"depth":47,"text":897},{"id":1530,"depth":47,"text":705},{"id":1694,"depth":41,"text":1694,"children":4314},[4315,4316,4317],{"id":1706,"depth":47,"text":657},{"id":1745,"depth":47,"text":705},{"id":1799,"depth":47,"text":757},{"id":1848,"depth":41,"text":1848,"children":4319},[4320,4321,4322],{"id":1856,"depth":47,"text":657},{"id":1895,"depth":47,"text":705},{"id":1949,"depth":47,"text":757},{"id":1989,"depth":41,"text":1989,"children":4324},[4325,4326],{"id":1997,"depth":47,"text":657},{"id":2036,"depth":47,"text":705},{"id":2100,"depth":41,"text":2100,"children":4328},[4329,4330,4331],{"id":2108,"depth":47,"text":657},{"id":2147,"depth":47,"text":705},{"id":2201,"depth":47,"text":757},{"id":2247,"depth":41,"text":2248,"children":4333},[4334,4335,4336],{"id":2257,"depth":47,"text":657},{"id":2308,"depth":47,"text":705},{"id":2362,"depth":47,"text":757},{"id":2417,"depth":41,"text":2418,"children":4338},[4339,4340,4341],{"id":2424,"depth":47,"text":657},{"id":2463,"depth":47,"text":705},{"id":2517,"depth":47,"text":757},{"id":2595,"depth":41,"text":2596,"children":4343},[4344,4345],{"id":2602,"depth":47,"text":657},{"id":2636,"depth":47,"text":705},{"id":2747,"depth":41,"text":2748},{"id":3054,"depth":41,"text":3055,"children":4348},[4349,4351,4353,4355,4357],{"id":3061,"depth":47,"text":4350},"1. Environment Setup & Installation",{"id":3131,"depth":47,"text":4352},"2. Project Configuration (CMake Example)",{"id":3265,"depth":47,"text":4354},"3. Code Usage (C++ Example)",{"id":3651,"depth":47,"text":4356},"4. Code Usage (Python Example)",{"id":3808,"depth":47,"text":3811},{"id":3999,"depth":41,"text":4000,"children":4359},[4360,4361],{"id":4003,"depth":47,"text":4004},{"id":4053,"depth":47,"text":4054},{"id":4128,"depth":41,"text":4363,"children":4364},"library not found in find_package",[4365,4366,4367,4368],{"id":4134,"depth":47,"text":4135},{"id":4174,"depth":47,"text":4175},{"id":4189,"depth":47,"text":4190},{"id":4252,"depth":47,"text":4253},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","2200-0400","2023-10-05","This section focuses specifically on how to install third-party libraries, how to find them in CMake, and how to place them in the template's Third-party dependencies section.","wiki\u002F2023-10-05-cplusplus-jiao-xue","en-us:2023-10-05-cplusplus-jiao-xue","\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法",false,null,"en-US","en-us",{},{"title":5,"description":4372},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","6mlhqDJFxGpapun-p4qHfmygDRRP16K6l4SZyL8sVyw",[4389,4395,4400,4405,4410,4415,4420,4425,4430,4435,4440,4445,4450,4455,4460,4465,4470,4475,4480,4485,4490,4495,4500,4505,4510,4515,4520,4525,4530,4535,4540,4545,4550,4555,4560,4565,4570,4575,4579,4584,4589,4594,4599,4604,4609,4614,4619,4624,4629,4634,4639,4644,4649,4654,4659,4664,4669,4674,4679,4684,4689,4693,4698,4703,4708,4713,4718,4723,4728,4733,4738,4743,4748,4753,4758,4763,4768,4773,4778,4779,4784,4789],{"path":4390,"stem":4391,"title":4392,"date":4371,"chapterOrder":4393,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++ Development Environment Setup and Testing","0100",0,{"path":4396,"stem":4397,"title":4398,"date":4371,"chapterOrder":4399,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++ Basics","0200",{"path":4401,"stem":4402,"title":4403,"date":4371,"chapterOrder":4404,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","Data Types and Data Storage","0300",{"path":4406,"stem":4407,"title":4408,"date":4371,"chapterOrder":4409,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","Input and Output","0400",{"path":4411,"stem":4412,"title":4413,"date":4371,"chapterOrder":4414,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","operator","0500",{"path":4416,"stem":4417,"title":4418,"date":4371,"chapterOrder":4419,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","program flow structure","0600",{"path":4421,"stem":4422,"title":4423,"date":4371,"chapterOrder":4424,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","array","0700",{"path":4426,"stem":4427,"title":4428,"date":4371,"chapterOrder":4429,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","Functions and Header Files","0800",{"path":4431,"stem":4432,"title":4433,"date":4371,"chapterOrder":4434,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","pointer","0900",{"path":4436,"stem":4437,"title":4438,"date":4371,"chapterOrder":4439,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","Structures and Unions","1000",{"path":4441,"stem":4442,"title":4443,"date":4371,"chapterOrder":4444,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","Memory Partitioning and Lifecycle","1100",{"path":4446,"stem":4447,"title":4448,"date":4371,"chapterOrder":4449,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","reference","1200",{"path":4451,"stem":4452,"title":4453,"date":4371,"chapterOrder":4454,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","Advanced Functions and Namespaces","1300",{"path":4456,"stem":4457,"title":4458,"date":4371,"chapterOrder":4459,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","encapsulation","1400-0100",{"path":4461,"stem":4462,"title":4463,"date":4371,"chapterOrder":4464,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","Object initialization and cleanup","1400-0200",{"path":4466,"stem":4467,"title":4468,"date":4371,"chapterOrder":4469,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","Object Model and the `this` Pointer","1400-0300",{"path":4471,"stem":4472,"title":4473,"date":4371,"chapterOrder":4474,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","Friends and operator overloading","1400-0400",{"path":4476,"stem":4477,"title":4478,"date":4371,"chapterOrder":4479,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","inheritance","1400-0500",{"path":4481,"stem":4482,"title":4483,"date":4371,"chapterOrder":4484,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","polymorphism","1400-0600",{"path":4486,"stem":4487,"title":4488,"date":4371,"chapterOrder":4489,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","Classes and Objects","1400",{"path":4491,"stem":4492,"title":4493,"date":4371,"chapterOrder":4494,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","File operations","1500",{"path":4496,"stem":4497,"title":4498,"date":4371,"chapterOrder":4499,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":4501,"stem":4502,"title":4503,"date":4371,"chapterOrder":4504,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","template","1700",{"path":4506,"stem":4507,"title":4508,"date":4371,"chapterOrder":4509,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","Introduction to STL","1800-0100",{"path":4511,"stem":4512,"title":4513,"date":4371,"chapterOrder":4514,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":4516,"stem":4517,"title":4518,"date":4371,"chapterOrder":4519,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string container","1800-0300",{"path":4521,"stem":4522,"title":4523,"date":4371,"chapterOrder":4524,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":4526,"stem":4527,"title":4528,"date":4371,"chapterOrder":4529,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":4531,"stem":4532,"title":4533,"date":4371,"chapterOrder":4534,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":4536,"stem":4537,"title":4538,"date":4371,"chapterOrder":4539,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue container","1800-0700",{"path":4541,"stem":4542,"title":4543,"date":4371,"chapterOrder":4544,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":4546,"stem":4547,"title":4548,"date":4371,"chapterOrder":4549,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":4551,"stem":4552,"title":4553,"date":4371,"chapterOrder":4554,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":4556,"stem":4557,"title":4558,"date":4371,"chapterOrder":4559,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","Function objects and predicates","1800-1100",{"path":4561,"stem":4562,"title":4563,"date":4371,"chapterOrder":4564,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","Common algorithms","1800-1200",{"path":4566,"stem":4567,"title":4568,"date":4371,"chapterOrder":4569,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","Level up your programming with STL.","1800",{"path":4571,"stem":4572,"title":4573,"date":4371,"chapterOrder":4574,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++ Type Casting","1900",{"path":4576,"stem":4577,"title":1820,"date":4371,"chapterOrder":4578,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","2000-0100",{"path":4580,"stem":4581,"title":4582,"date":4371,"chapterOrder":4583,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":4585,"stem":4586,"title":4587,"date":4371,"chapterOrder":4588,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":4590,"stem":4591,"title":4592,"date":4371,"chapterOrder":4593,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":4595,"stem":4596,"title":4597,"date":4371,"chapterOrder":4598,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","range-based for loop","2000-0500",{"path":4600,"stem":4601,"title":4602,"date":4371,"chapterOrder":4603,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","structured binding","2000-0600",{"path":4605,"stem":4606,"title":4607,"date":4371,"chapterOrder":4608,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":4610,"stem":4611,"title":4612,"date":4371,"chapterOrder":4613,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":4615,"stem":4616,"title":4617,"date":4371,"chapterOrder":4618,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","Smart pointer","2000-0900",{"path":4620,"stem":4621,"title":4622,"date":4371,"chapterOrder":4623,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","Rvalue references and move semantics","2000-1000",{"path":4625,"stem":4626,"title":4627,"date":4371,"chapterOrder":4628,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda expression","2000-1100",{"path":4630,"stem":4631,"title":4632,"date":4371,"chapterOrder":4633,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":4635,"stem":4636,"title":4637,"date":4371,"chapterOrder":4638,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":4640,"stem":4641,"title":4642,"date":4371,"chapterOrder":4643,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":4645,"stem":4646,"title":4647,"date":4371,"chapterOrder":4648,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":4650,"stem":4651,"title":4652,"date":4371,"chapterOrder":4653,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":4655,"stem":4656,"title":4657,"date":4371,"chapterOrder":4658,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":4660,"stem":4661,"title":4662,"date":4371,"chapterOrder":4663,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":4665,"stem":4666,"title":4667,"date":4371,"chapterOrder":4668,"chapterDepth":41,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread and join","2000-1900-0100",{"path":4670,"stem":4671,"title":4672,"date":4371,"chapterOrder":4673,"chapterDepth":41,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 与 lock_guard","2000-1900-0200",{"path":4675,"stem":4676,"title":4677,"date":4371,"chapterOrder":4678,"chapterDepth":41,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":4680,"stem":4681,"title":4682,"date":4371,"chapterOrder":4683,"chapterDepth":41,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":4685,"stem":4686,"title":4687,"date":4371,"chapterOrder":4688,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","Concurrent programming","2000-1900",{"path":4690,"stem":4691,"title":1396,"date":4371,"chapterOrder":4692,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","2000-2000",{"path":4694,"stem":4695,"title":4696,"date":4371,"chapterOrder":4697,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","Modules Introduction","2000-2100",{"path":4699,"stem":4700,"title":4701,"date":4371,"chapterOrder":4702,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","Modern C++","2000",{"path":4704,"stem":4705,"title":4706,"date":4371,"chapterOrder":4707,"chapterDepth":41,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","Timers and Asynchronous I\u002FO","2100-0100-0100",{"path":4709,"stem":4710,"title":4711,"date":4371,"chapterOrder":4712,"chapterDepth":41,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio Basics","2100-0100-0200",{"path":4714,"stem":4715,"title":4716,"date":4371,"chapterOrder":4717,"chapterDepth":41,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","serial communication","2100-0100-0300",{"path":4719,"stem":4720,"title":4721,"date":4371,"chapterOrder":4722,"chapterDepth":41,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP communication","2100-0100-0400",{"path":4724,"stem":4725,"title":4726,"date":4371,"chapterOrder":4727,"chapterDepth":41,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP communication","2100-0100-0500",{"path":4729,"stem":4730,"title":4731,"date":4371,"chapterOrder":4732,"chapterDepth":41,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","Robot Engineering Approach and ROS2 Integration","2100-0100-0600",{"path":4734,"stem":4735,"title":4736,"date":4371,"chapterOrder":4737,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio asynchronous IO library","2100-0100",{"path":4739,"stem":4740,"title":4741,"date":4371,"chapterOrder":4742,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen linear algebra library","2100-0200",{"path":4744,"stem":4745,"title":4746,"date":4371,"chapterOrder":4747,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV Computer Vision Library","2100-0300",{"path":4749,"stem":4750,"title":4751,"date":4371,"chapterOrder":4752,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL Point Cloud Library","2100-0400",{"path":4754,"stem":4755,"title":4756,"date":4371,"chapterOrder":4757,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus Lie group and Lie algebra library","2100-0500",{"path":4759,"stem":4760,"title":4761,"date":4371,"chapterOrder":4762,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","Learning Common Libraries","2100",{"path":4764,"stem":4765,"title":4766,"date":4371,"chapterOrder":4767,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets and Build Installation","2200-0100",{"path":4769,"stem":4770,"title":4771,"date":4371,"chapterOrder":4772,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","Top-level CMake and Public Compilation Options","2200-0200",{"path":4774,"stem":4775,"title":4776,"date":4371,"chapterOrder":4777,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","Detailed CMake Explanation for src and lib Modules","2200-0300",{"path":4369,"stem":4386,"title":5,"date":4371,"chapterOrder":4370,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},{"path":4780,"stem":4781,"title":4782,"date":4371,"chapterOrder":4783,"chapterDepth":34,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","Template Extensions and FAQ","2200-0500",{"path":4785,"stem":4786,"title":4787,"date":4371,"chapterOrder":4788,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":4379},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake Project Template","2200",{"path":4375,"stem":4790,"title":4791,"date":4371,"chapterOrder":4380,"chapterDepth":4394,"docKey":4374,"docRoot":4375,"docTitle":4376,"isWikiDoc":66,"isWikiIndex":66},"_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++ tutorial",{"variants":4793},[4794,4795,4798,4801,4804],{"path":4369,"localeSlug":4382,"i18nKey":4378},{"path":4796,"localeSlug":4797,"i18nKey":4378},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","zh-hant",{"path":4799,"localeSlug":4800,"i18nKey":4378},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","zh-hk",{"path":4802,"localeSlug":4803,"i18nKey":4378},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","zh-tw",{"path":4805,"localeSlug":4806,"i18nKey":4378},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","zh-cn",[4369,4385,4796,4385,4799,4385,4802,4385,4805,4385],1784646872521]