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