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