[{"data":1,"prerenderedAt":2953},["ShallowReactive",2],{"wiki-page-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang":3,"wiki-doc-items-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang":2531,"language-switcher-data-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang":2937,"wiki-i18n-paths-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang":2952},{"id":4,"title":5,"body":6,"canonicalPath":2513,"chapterDepth":54,"chapterOrder":2514,"date":2515,"description":12,"docI18nKey":2516,"docKey":2517,"docRoot":2518,"docTitle":2519,"extension":2520,"i18nKey":2521,"isBlogPost":2522,"isWikiDoc":75,"isWikiIndex":2522,"layout":2523,"legacyPath":2523,"locale":2524,"localeSlug":2525,"meta":2526,"navigation":75,"path":2513,"seo":2527,"sourcePath":2528,"sourceStem":2521,"stem":2529,"wikiDepth":54,"__hash__":2530},"content\u002F_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项.md","Top-level CMake and Public Compilation Options",{"type":7,"value":8,"toc":2485},"minimark",[9,13,29,32,38,41,138,144,148,163,169,180,183,220,223,294,297,301,316,320,334,339,351,354,392,399,426,429,437,440,456,459,465,470,482,485,487,512,515,575,578,584,593,596,599,659,662,678,693,699,710,713,716,810,813,833,845,848,874,877,919,922,949,955,970,973,978,983,986,1014,1017,1057,1063,1066,1072,1075,1084,1087,1093,1099,1110,1120,1122,1151,1154,1166,1169,1181,1184,1187,1197,1202,1207,1210,1378,1381,1387,1398,1401,1403,1466,1469,1479,1482,1505,1508,1514,1529,1532,1534,1564,1570,1576,1591,1594,1596,1639,1645,1649,1680,1683,1686,1735,1742,1756,1759,1765,1780,1786,1789,1792,1822,1829,1847,1854,1860,1875,1878,1890,1895,1993,1996,2005,2008,2012,2027,2030,2032,2094,2105,2108,2118,2121,2135,2138,2144,2159,2162,2165,2192,2196,2225,2228,2231,2275,2278,2320,2326,2338,2341,2360,2363,2413,2416,2450,2453,2481],[10,11,12],"p",{},"This section covers two files:",[14,15,16,24],"ol",{},[17,18,19,20],"li",{},"Top Level ",[21,22,23],"code",{},"CMakeLists.txt",[17,25,26],{},[21,27,28],{},"cmake\u002FProjectOptions.cmake",[10,30,31],{},"These two files determine the basic metadata and common compilation rules for the entire project.",[33,34,19,36],"h2",{"id":35},"top-level-cmakeliststxt",[21,37,23],{},[10,39,40],{},"The top-level files of this template are as follows:",[42,43,48],"pre",{"className":44,"code":45,"language":46,"meta":47,"style":47},"language-cmake shiki shiki-themes github-light github-dark","cmake_minimum_required(VERSION 3.25)\n\nproject(cmake_template VERSION 1.0.0 LANGUAGES C CXX)\n\ninclude(GNUInstallDirs)\n\ninclude(\"${CMAKE_CURRENT_LIST_DIR}\u002Fcmake\u002FProjectOptions.cmake\")\n\nadd_subdirectory(src)\n","cmake","",[21,49,50,70,77,91,96,105,110,124,129],{"__ignoreMap":47},[51,52,55,59,63,67],"span",{"class":53,"line":54},"line",1,[51,56,58],{"class":57},"szBVR","cmake_minimum_required",[51,60,62],{"class":61},"sVt8B","(",[51,64,66],{"class":65},"sScJk","VERSION",[51,68,69],{"class":61}," 3.25)\n",[51,71,73],{"class":53,"line":72},2,[51,74,76],{"emptyLinePlaceholder":75},true,"\n",[51,78,80,83,86,88],{"class":53,"line":79},3,[51,81,82],{"class":57},"project",[51,84,85],{"class":61},"(cmake_template ",[51,87,66],{"class":65},[51,89,90],{"class":61}," 1.0.0 LANGUAGES C CXX)\n",[51,92,94],{"class":53,"line":93},4,[51,95,76],{"emptyLinePlaceholder":75},[51,97,99,102],{"class":53,"line":98},5,[51,100,101],{"class":57},"include",[51,103,104],{"class":61},"(GNUInstallDirs)\n",[51,106,108],{"class":53,"line":107},6,[51,109,76],{"emptyLinePlaceholder":75},[51,111,113,115,117,121],{"class":53,"line":112},7,[51,114,101],{"class":57},[51,116,62],{"class":61},[51,118,120],{"class":119},"sZZnC","\"${CMAKE_CURRENT_LIST_DIR}\u002Fcmake\u002FProjectOptions.cmake\"",[51,122,123],{"class":61},")\n",[51,125,127],{"class":53,"line":126},8,[51,128,76],{"emptyLinePlaceholder":75},[51,130,132,135],{"class":53,"line":131},9,[51,133,134],{"class":57},"add_subdirectory",[51,136,137],{"class":61},"(src)\n",[10,139,140,141,143],{},"The principle of the top-level ",[21,142,23],{}," is to only serve as overall control without containing specific business logic or third-party dependencies.",[33,145,146],{"id":58},[21,147,58],{},[42,149,151],{"className":44,"code":150,"language":46,"meta":47,"style":47},"cmake_minimum_required(VERSION 3.25)\n",[21,152,153],{"__ignoreMap":47},[51,154,155,157,159,161],{"class":53,"line":54},[51,156,58],{"class":57},[51,158,62],{"class":61},[51,160,66],{"class":65},[51,162,69],{"class":61},[10,164,165],{},[166,167,168],"strong",{},"Purpose:",[14,170,171,174,177],{},[17,172,173],{},"Specify the minimum CMake version required for the project.",[17,175,176],{},"Instruct CMake to use the policy behavior of the corresponding version.",[17,178,179],{},"Outdated versions of CMake will fail outright and not proceed with configuration.",[10,181,182],{},"What can be filled in:",[42,184,186],{"className":44,"code":185,"language":46,"meta":47,"style":47},"cmake_minimum_required(VERSION 3.20)\ncmake_minimum_required(VERSION 3.25)\ncmake_minimum_required(VERSION 3.28)\n",[21,187,188,199,209],{"__ignoreMap":47},[51,189,190,192,194,196],{"class":53,"line":54},[51,191,58],{"class":57},[51,193,62],{"class":61},[51,195,66],{"class":65},[51,197,198],{"class":61}," 3.20)\n",[51,200,201,203,205,207],{"class":53,"line":72},[51,202,58],{"class":57},[51,204,62],{"class":61},[51,206,66],{"class":65},[51,208,69],{"class":61},[51,210,211,213,215,217],{"class":53,"line":79},[51,212,58],{"class":57},[51,214,62],{"class":61},[51,216,66],{"class":65},[51,218,219],{"class":61}," 3.28)\n",[10,221,222],{},"Selection suggestions:",[224,225,226,240],"table",{},[227,228,229],"thead",{},[230,231,232,237],"tr",{},[233,234,236],"th",{"align":235},"left","writing method",[233,238,239],{"align":235},"Explanation",[241,242,243,254,264,274,284],"tbody",{},[230,244,245,251],{},[246,247,248],"td",{"align":235},[21,249,250],{},"3.10",[246,252,253],{"align":235},"It's quite old, and many modern CMake writing practices are inconvenient.",[230,255,256,261],{},[246,257,258],{"align":235},[21,259,260],{},"3.16",[246,262,263],{"align":235},"Ubuntu 20.04 is a commonly used version with excellent compatibility. It's an LTS release with 5-year support and good hardware and driver compatibility.",[230,265,266,271],{},[246,267,268],{"align":235},[21,269,270],{},"3.22",[246,272,273],{"align":235},"Common versions of Ubuntu 22.04",[230,275,276,281],{},[246,277,278],{"align":235},[21,279,280],{},"3.25",[246,282,283],{"align":235},"This template is used in conjunction with preset version 6.",[230,285,286,291],{},[246,287,288],{"align":235},[21,289,290],{},"3.28+",[246,292,293],{"align":235},"Suitable for newer systems, but template universality decreases.",[10,295,296],{},"It's recommended that the teaching template not endlessly chase novelty. Just meeting the current writing style is sufficient.",[33,298,299],{"id":82},[21,300,82],{},[42,302,304],{"className":44,"code":303,"language":46,"meta":47,"style":47},"project(cmake_template VERSION 1.0.0 LANGUAGES C CXX)\n",[21,305,306],{"__ignoreMap":47},[51,307,308,310,312,314],{"class":53,"line":54},[51,309,82],{"class":57},[51,311,85],{"class":61},[51,313,66],{"class":65},[51,315,90],{"class":61},[10,317,318],{},[166,319,168],{},[14,321,322,325,328,331],{},[17,323,324],{},"Set the project name.",[17,326,327],{},"Set the project version.",[17,329,330],{},"Declare which languages the project uses.",[17,332,333],{},"Initialize a batch of CMake variables.",[335,336,338],"h3",{"id":337},"project-name","Project Name",[42,340,342],{"className":44,"code":341,"language":46,"meta":47,"style":47},"project(cmake_template)\n",[21,343,344],{"__ignoreMap":47},[51,345,346,348],{"class":53,"line":54},[51,347,82],{"class":57},[51,349,350],{"class":61},"(cmake_template)\n",[10,352,353],{},"The project name affects these variables:",[224,355,356,366],{},[227,357,358],{},[230,359,360,363],{},[233,361,362],{"align":235},"variables",[233,364,365],{"align":235},"value",[241,367,368,380],{},[230,369,370,375],{},[246,371,372],{"align":235},[21,373,374],{},"PROJECT_NAME",[246,376,377],{"align":235},[21,378,379],{},"cmake_template",[230,381,382,387],{},[246,383,384],{"align":235},[21,385,386],{},"CMAKE_PROJECT_NAME",[246,388,389,390],{"align":235},"The top-level project name, which is also usually ",[21,391,379],{},[10,393,394,395,398],{},"This template is used in ",[21,396,397],{},"src\u002FCMakeLists.txt",":",[42,400,402],{"className":44,"code":401,"language":46,"meta":47,"style":47},"add_executable(${PROJECT_NAME}\n  ${CMAKE_CURRENT_SOURCE_DIR}\u002Fmain.cpp\n)\n",[21,403,404,414,422],{"__ignoreMap":47},[51,405,406,409,411],{"class":53,"line":54},[51,407,408],{"class":57},"add_executable",[51,410,62],{"class":61},[51,412,413],{"class":57},"${PROJECT_NAME}\n",[51,415,416,419],{"class":53,"line":72},[51,417,418],{"class":57},"  ${CMAKE_CURRENT_SOURCE_DIR}",[51,420,421],{"class":61},"\u002Fmain.cpp\n",[51,423,424],{"class":53,"line":79},[51,425,123],{"class":61},[10,427,428],{},"So the final executable file name is:",[42,430,435],{"className":431,"code":433,"language":434,"meta":47},[432],"language-text","cmake_template\n","text",[21,436,433],{"__ignoreMap":47},[10,438,439],{},"If the project name is changed to:",[42,441,443],{"className":44,"code":442,"language":46,"meta":47,"style":47},"project(robot_app VERSION 1.0.0 LANGUAGES C CXX)\n",[21,444,445],{"__ignoreMap":47},[51,446,447,449,452,454],{"class":53,"line":54},[51,448,82],{"class":57},[51,450,451],{"class":61},"(robot_app ",[51,453,66],{"class":65},[51,455,90],{"class":61},[10,457,458],{},"The final executable file will become:",[42,460,463],{"className":461,"code":462,"language":434,"meta":47},[432],"robot_app\n",[21,464,462],{"__ignoreMap":47},[335,466,468],{"id":467},"version",[21,469,66],{},[42,471,473],{"className":44,"code":472,"language":46,"meta":47,"style":47},"VERSION 1.0.0\n",[21,474,475],{"__ignoreMap":47},[51,476,477,479],{"class":53,"line":54},[51,478,66],{"class":65},[51,480,481],{"class":61}," 1.0.0\n",[10,483,484],{},"Project version number.",[10,486,182],{},[42,488,490],{"className":44,"code":489,"language":46,"meta":47,"style":47},"VERSION 0.1.0\nVERSION 1.0.0\nVERSION 2.3.4\n",[21,491,492,499,505],{"__ignoreMap":47},[51,493,494,496],{"class":53,"line":54},[51,495,66],{"class":65},[51,497,498],{"class":61}," 0.1.0\n",[51,500,501,503],{"class":53,"line":72},[51,502,66],{"class":65},[51,504,481],{"class":61},[51,506,507,509],{"class":53,"line":79},[51,508,66],{"class":65},[51,510,511],{"class":61}," 2.3.4\n",[10,513,514],{},"CMake will generate these variables:",[224,516,517,526],{},[227,518,519],{},[230,520,521,523],{},[233,522,362],{"align":235},[233,524,525],{"align":235},"Sample value",[241,527,528,540,552,564],{},[230,529,530,535],{},[246,531,532],{"align":235},[21,533,534],{},"PROJECT_VERSION",[246,536,537],{"align":235},[21,538,539],{},"1.0.0",[230,541,542,547],{},[246,543,544],{"align":235},[21,545,546],{},"PROJECT_VERSION_MAJOR",[246,548,549],{"align":235},[21,550,551],{},"1",[230,553,554,559],{},[246,555,556],{"align":235},[21,557,558],{},"PROJECT_VERSION_MINOR",[246,560,561],{"align":235},[21,562,563],{},"0",[230,565,566,571],{},[246,567,568],{"align":235},[21,569,570],{},"PROJECT_VERSION_PATCH",[246,572,573],{"align":235},[21,574,563],{},[10,576,577],{},"In the future, when creating installation packages, exporting CMake packages, or generating version header files, these variables will be quite useful.",[335,579,581],{"id":580},"languages",[21,582,583],{},"LANGUAGES",[42,585,587],{"className":44,"code":586,"language":46,"meta":47,"style":47},"LANGUAGES C CXX\n",[21,588,589],{"__ignoreMap":47},[51,590,591],{"class":53,"line":54},[51,592,586],{"class":61},[10,594,595],{},"Declares which languages are enabled for the project.",[10,597,598],{},"Common values:",[224,600,601,609],{},[227,602,603],{},[230,604,605,607],{},[233,606,365],{"align":235},[233,608,239],{"align":235},[241,610,611,621,631,640,650],{},[230,612,613,618],{},[246,614,615],{"align":235},[21,616,617],{},"C",[246,619,620],{"align":235},"C language",[230,622,623,628],{},[246,624,625],{"align":235},[21,626,627],{},"CXX",[246,629,630],{"align":235},"C++",[230,632,633,638],{},[246,634,635],{"align":235},[21,636,637],{},"CUDA",[246,639,637],{"align":235},[230,641,642,647],{},[246,643,644],{"align":235},[21,645,646],{},"ASM",[246,648,649],{"align":235},"assembly",[230,651,652,657],{},[246,653,654],{"align":235},[21,655,656],{},"Fortran",[246,658,656],{"align":235},[10,660,661],{},"If the project only includes C++, you can also write:",[42,663,665],{"className":44,"code":664,"language":46,"meta":47,"style":47},"project(cmake_template VERSION 1.0.0 LANGUAGES CXX)\n",[21,666,667],{"__ignoreMap":47},[51,668,669,671,673,675],{"class":53,"line":54},[51,670,82],{"class":57},[51,672,85],{"class":61},[51,674,66],{"class":65},[51,676,677],{"class":61}," 1.0.0 LANGUAGES CXX)\n",[10,679,680,681,684,685,688,689,692],{},"This template retains ",[21,682,683],{},"C CXX"," to allow both ",[21,686,687],{},"src\u002F*.c"," and ",[21,690,691],{},"src\u002F*.cpp"," to participate in the build.",[33,694,696],{"id":695},"includegnuinstalldirs",[21,697,698],{},"include(GNUInstallDirs)",[42,700,702],{"className":44,"code":701,"language":46,"meta":47,"style":47},"include(GNUInstallDirs)\n",[21,703,704],{"__ignoreMap":47},[51,705,706,708],{"class":53,"line":54},[51,707,101],{"class":57},[51,709,104],{"class":61},[10,711,712],{},"Purpose: loads GNU-style installation directory variables.",[10,714,715],{},"Common variables:",[224,717,718,730],{},[227,719,720],{},[230,721,722,724,727],{},[233,723,362],{"align":235},[233,725,726],{"align":235},"Common value",[233,728,729],{"align":235},"Usage",[241,731,732,747,766,780,795],{},[230,733,734,739,744],{},[246,735,736],{"align":235},[21,737,738],{},"CMAKE_INSTALL_BINDIR",[246,740,741],{"align":235},[21,742,743],{},"bin",[246,745,746],{"align":235},"executable file",[230,748,749,754,763],{},[246,750,751],{"align":235},[21,752,753],{},"CMAKE_INSTALL_LIBDIR",[246,755,756,759,760],{"align":235},[21,757,758],{},"lib"," or ",[21,761,762],{},"lib64",[246,764,765],{"align":235},"Dynamic library, static library",[230,767,768,773,777],{},[246,769,770],{"align":235},[21,771,772],{},"CMAKE_INSTALL_INCLUDEDIR",[246,774,775],{"align":235},[21,776,101],{},[246,778,779],{"align":235},"Header file",[230,781,782,787,792],{},[246,783,784],{"align":235},[21,785,786],{},"CMAKE_INSTALL_DATADIR",[246,788,789],{"align":235},[21,790,791],{},"share",[246,793,794],{"align":235},"Data file",[230,796,797,802,807],{},[246,798,799],{"align":235},[21,800,801],{},"CMAKE_INSTALL_DOCDIR",[246,803,804],{"align":235},[21,805,806],{},"share\u002Fdoc\u002F项目名",[246,808,809],{"align":235},"documentation",[10,811,812],{},"Why not use handwritten:",[42,814,816],{"className":44,"code":815,"language":46,"meta":47,"style":47},"install(TARGETS app DESTINATION bin)\ninstall(TARGETS lib DESTINATION lib)\n",[21,817,818,826],{"__ignoreMap":47},[51,819,820,823],{"class":53,"line":54},[51,821,822],{"class":57},"install",[51,824,825],{"class":61},"(TARGETS app DESTINATION bin)\n",[51,827,828,830],{"class":53,"line":72},[51,829,822],{"class":57},[51,831,832],{"class":61},"(TARGETS lib DESTINATION lib)\n",[10,834,835,836,759,838,840,841,844],{},"Since different Linux distributions may use ",[21,837,758],{},[21,839,762],{},". Using ",[21,842,843],{},"GNUInstallDirs"," allows CMake to adapt based on system conventions.",[10,846,847],{},"Usage example in the template:",[42,849,851],{"className":44,"code":850,"language":46,"meta":47,"style":47},"install(TARGETS ${PROJECT_NAME}\n  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}\n)\n",[21,852,853,862,870],{"__ignoreMap":47},[51,854,855,857,860],{"class":53,"line":54},[51,856,822],{"class":57},[51,858,859],{"class":61},"(TARGETS ",[51,861,413],{"class":57},[51,863,864,867],{"class":53,"line":72},[51,865,866],{"class":61},"  RUNTIME DESTINATION ",[51,868,869],{"class":57},"${CMAKE_INSTALL_BINDIR}\n",[51,871,872],{"class":53,"line":79},[51,873,123],{"class":61},[10,875,876],{},"Library Installation:",[42,878,880],{"className":44,"code":879,"language":46,"meta":47,"style":47},"install(TARGETS ${PREFIX}_src_lib\n  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}\n  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}\n  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}\n)\n",[21,881,882,894,902,909,915],{"__ignoreMap":47},[51,883,884,886,888,891],{"class":53,"line":54},[51,885,822],{"class":57},[51,887,859],{"class":61},[51,889,890],{"class":57},"${PREFIX}",[51,892,893],{"class":61},"_src_lib\n",[51,895,896,899],{"class":53,"line":72},[51,897,898],{"class":61},"  LIBRARY DESTINATION ",[51,900,901],{"class":57},"${CMAKE_INSTALL_LIBDIR}\n",[51,903,904,907],{"class":53,"line":79},[51,905,906],{"class":61},"  ARCHIVE DESTINATION ",[51,908,901],{"class":57},[51,910,911,913],{"class":53,"line":93},[51,912,866],{"class":61},[51,914,869],{"class":57},[51,916,917],{"class":53,"line":98},[51,918,123],{"class":61},[10,920,921],{},"Header file installation:",[42,923,925],{"className":44,"code":924,"language":46,"meta":47,"style":47},"install(DIRECTORY \"${CMAKE_CURRENT_LIST_DIR}\u002Finc\u002F\"\n  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}\n)\n",[21,926,927,937,945],{"__ignoreMap":47},[51,928,929,931,934],{"class":53,"line":54},[51,930,822],{"class":57},[51,932,933],{"class":61},"(DIRECTORY ",[51,935,936],{"class":119},"\"${CMAKE_CURRENT_LIST_DIR}\u002Finc\u002F\"\n",[51,938,939,942],{"class":53,"line":72},[51,940,941],{"class":61},"  DESTINATION ",[51,943,944],{"class":57},"${CMAKE_INSTALL_INCLUDEDIR}\n",[51,946,947],{"class":53,"line":79},[51,948,123],{"class":61},[33,950,952],{"id":951},"includecmake_current_list_dircmakeprojectoptionscmake",[21,953,954],{},"include(\"${CMAKE_CURRENT_LIST_DIR}\u002Fcmake\u002FProjectOptions.cmake\")",[42,956,958],{"className":44,"code":957,"language":46,"meta":47,"style":47},"include(\"${CMAKE_CURRENT_LIST_DIR}\u002Fcmake\u002FProjectOptions.cmake\")\n",[21,959,960],{"__ignoreMap":47},[51,961,962,964,966,968],{"class":53,"line":54},[51,963,101],{"class":57},[51,965,62],{"class":61},[51,967,120],{"class":119},[51,969,123],{"class":61},[10,971,972],{},"Function: Reads another CMake file.",[335,974,975],{"id":101},[21,976,977],{},"include(...)",[10,979,980,982],{},[21,981,101],{}," will execute the specified CMake script in the current scope.",[10,984,985],{},"Yes, you can write:",[42,987,989],{"className":44,"code":988,"language":46,"meta":47,"style":47},"include(GNUInstallDirs)\ninclude(cmake\u002FProjectOptions.cmake)\ninclude(\"${CMAKE_CURRENT_LIST_DIR}\u002Fcmake\u002FProjectOptions.cmake\")\n",[21,990,991,997,1004],{"__ignoreMap":47},[51,992,993,995],{"class":53,"line":54},[51,994,101],{"class":57},[51,996,104],{"class":61},[51,998,999,1001],{"class":53,"line":72},[51,1000,101],{"class":57},[51,1002,1003],{"class":61},"(cmake\u002FProjectOptions.cmake)\n",[51,1005,1006,1008,1010,1012],{"class":53,"line":79},[51,1007,101],{"class":57},[51,1009,62],{"class":61},[51,1011,120],{"class":119},[51,1013,123],{"class":61},[10,1015,1016],{},"Difference:",[224,1018,1019,1027],{},[227,1020,1021],{},[230,1022,1023,1025],{},[233,1024,236],{"align":235},[233,1026,239],{"align":235},[241,1028,1029,1038,1048],{},[230,1030,1031,1035],{},[246,1032,1033],{"align":235},[21,1034,698],{},[246,1036,1037],{"align":235},"Loading built-in CMake modules",[230,1039,1040,1045],{},[246,1041,1042],{"align":235},[21,1043,1044],{},"include(cmake\u002FProjectOptions.cmake)",[246,1046,1047],{"align":235},"Relative path notation.",[230,1049,1050,1054],{},[246,1051,1052],{"align":235},[21,1053,954],{},[246,1055,1056],{"align":235},"more stable, unaffected by the current working directory",[335,1058,1060],{"id":1059},"cmake_current_list_dir",[21,1061,1062],{},"CMAKE_CURRENT_LIST_DIR",[10,1064,1065],{},"Indicates the directory of the CMake file currently being processed.",[10,1067,1068,1069,1071],{},"In the top-level ",[21,1070,23],{},", it serves as the project root directory.",[10,1073,1074],{},"So:",[42,1076,1078],{"className":44,"code":1077,"language":46,"meta":47,"style":47},"\"${CMAKE_CURRENT_LIST_DIR}\u002Fcmake\u002FProjectOptions.cmake\"\n",[21,1079,1080],{"__ignoreMap":47},[51,1081,1082],{"class":53,"line":54},[51,1083,1077],{"class":119},[10,1085,1086],{},"Indicates:",[42,1088,1091],{"className":1089,"code":1090,"language":434,"meta":47},[432],"项目根目录\u002Fcmake\u002FProjectOptions.cmake\n",[21,1092,1090],{"__ignoreMap":47},[33,1094,1096],{"id":1095},"add_subdirectorysrc",[21,1097,1098],{},"add_subdirectory(src)",[42,1100,1102],{"className":44,"code":1101,"language":46,"meta":47,"style":47},"add_subdirectory(src)\n",[21,1103,1104],{"__ignoreMap":47},[51,1105,1106,1108],{"class":53,"line":54},[51,1107,134],{"class":57},[51,1109,137],{"class":61},[10,1111,1112,1113,1116,1117,1119],{},"Function: Enters the ",[21,1114,1115],{},"src"," subdirectory and continues reading ",[21,1118,397],{},".",[10,1121,182],{},[42,1123,1125],{"className":44,"code":1124,"language":46,"meta":47,"style":47},"add_subdirectory(src)\nadd_subdirectory(test)\nadd_subdirectory(third_party\u002Fsome_lib)\n",[21,1126,1127,1133,1144],{"__ignoreMap":47},[51,1128,1129,1131],{"class":53,"line":54},[51,1130,134],{"class":57},[51,1132,137],{"class":61},[51,1134,1135,1137,1139,1142],{"class":53,"line":72},[51,1136,134],{"class":57},[51,1138,62],{"class":61},[51,1140,1141],{"class":57},"test",[51,1143,123],{"class":61},[51,1145,1146,1148],{"class":53,"line":79},[51,1147,134],{"class":57},[51,1149,1150],{"class":61},"(third_party\u002Fsome_lib)\n",[10,1152,1153],{},"common practice",[42,1155,1157],{"className":44,"code":1156,"language":46,"meta":47,"style":47},"add_subdirectory(\u003C源码目录>)\n",[21,1158,1159],{"__ignoreMap":47},[51,1160,1161,1163],{"class":53,"line":54},[51,1162,134],{"class":57},[51,1164,1165],{"class":61},"(\u003C源码目录>)\n",[10,1167,1168],{},"You can also specify the build directory:",[42,1170,1172],{"className":44,"code":1171,"language":46,"meta":47,"style":47},"add_subdirectory(src src_build)\n",[21,1173,1174],{"__ignoreMap":47},[51,1175,1176,1178],{"class":53,"line":54},[51,1177,134],{"class":57},[51,1179,1180],{"class":61},"(src src_build)\n",[10,1182,1183],{},"But generally, it's not needed.",[10,1185,1186],{},"At the top level, only write:",[42,1188,1189],{"className":44,"code":1101,"language":46,"meta":47,"style":47},[21,1190,1191],{"__ignoreMap":47},[51,1192,1193,1195],{"class":53,"line":54},[51,1194,134],{"class":57},[51,1196,137],{"class":61},[10,1198,1199,1200,1119],{},"Specific executables, libraries, and dependencies are all managed by the CMake files under ",[21,1201,1115],{},[33,1203,1205],{"id":1204},"cmakeprojectoptionscmake",[21,1206,28],{},[10,1208,1209],{},"The content of this template is as follows:",[42,1211,1213],{"className":44,"code":1212,"language":46,"meta":47,"style":47},"set(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\nset(CMAKE_CXX_EXTENSIONS OFF)\n\nset(CMAKE_C_STANDARD 11)\nset(CMAKE_C_STANDARD_REQUIRED ON)\nset(CMAKE_C_EXTENSIONS OFF)\n\nset(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n\nadd_library(project_options INTERFACE)\ntarget_compile_features(project_options INTERFACE cxx_std_17)\n\nadd_library(project_warnings INTERFACE)\ntarget_compile_options(project_warnings INTERFACE\n  -Wall\n  -Wextra\n  -Wpedantic\n)\n",[21,1214,1215,1223,1235,1247,1251,1258,1269,1280,1284,1295,1300,1314,1327,1332,1344,1355,1361,1367,1373],{"__ignoreMap":47},[51,1216,1217,1220],{"class":53,"line":54},[51,1218,1219],{"class":57},"set",[51,1221,1222],{"class":61},"(CMAKE_CXX_STANDARD 17)\n",[51,1224,1225,1227,1230,1233],{"class":53,"line":72},[51,1226,1219],{"class":57},[51,1228,1229],{"class":61},"(CMAKE_CXX_STANDARD_REQUIRED ",[51,1231,1232],{"class":57},"ON",[51,1234,123],{"class":61},[51,1236,1237,1239,1242,1245],{"class":53,"line":79},[51,1238,1219],{"class":57},[51,1240,1241],{"class":61},"(CMAKE_CXX_EXTENSIONS ",[51,1243,1244],{"class":57},"OFF",[51,1246,123],{"class":61},[51,1248,1249],{"class":53,"line":93},[51,1250,76],{"emptyLinePlaceholder":75},[51,1252,1253,1255],{"class":53,"line":98},[51,1254,1219],{"class":57},[51,1256,1257],{"class":61},"(CMAKE_C_STANDARD 11)\n",[51,1259,1260,1262,1265,1267],{"class":53,"line":107},[51,1261,1219],{"class":57},[51,1263,1264],{"class":61},"(CMAKE_C_STANDARD_REQUIRED ",[51,1266,1232],{"class":57},[51,1268,123],{"class":61},[51,1270,1271,1273,1276,1278],{"class":53,"line":112},[51,1272,1219],{"class":57},[51,1274,1275],{"class":61},"(CMAKE_C_EXTENSIONS ",[51,1277,1244],{"class":57},[51,1279,123],{"class":61},[51,1281,1282],{"class":53,"line":126},[51,1283,76],{"emptyLinePlaceholder":75},[51,1285,1286,1288,1291,1293],{"class":53,"line":131},[51,1287,1219],{"class":57},[51,1289,1290],{"class":61},"(CMAKE_EXPORT_COMPILE_COMMANDS ",[51,1292,1232],{"class":57},[51,1294,123],{"class":61},[51,1296,1298],{"class":53,"line":1297},10,[51,1299,76],{"emptyLinePlaceholder":75},[51,1301,1303,1306,1309,1312],{"class":53,"line":1302},11,[51,1304,1305],{"class":57},"add_library",[51,1307,1308],{"class":61},"(project_options ",[51,1310,1311],{"class":65},"INTERFACE",[51,1313,123],{"class":61},[51,1315,1317,1320,1322,1324],{"class":53,"line":1316},12,[51,1318,1319],{"class":57},"target_compile_features",[51,1321,1308],{"class":61},[51,1323,1311],{"class":65},[51,1325,1326],{"class":61}," cxx_std_17)\n",[51,1328,1330],{"class":53,"line":1329},13,[51,1331,76],{"emptyLinePlaceholder":75},[51,1333,1335,1337,1340,1342],{"class":53,"line":1334},14,[51,1336,1305],{"class":57},[51,1338,1339],{"class":61},"(project_warnings ",[51,1341,1311],{"class":65},[51,1343,123],{"class":61},[51,1345,1347,1350,1352],{"class":53,"line":1346},15,[51,1348,1349],{"class":57},"target_compile_options",[51,1351,1339],{"class":61},[51,1353,1354],{"class":65},"INTERFACE\n",[51,1356,1358],{"class":53,"line":1357},16,[51,1359,1360],{"class":61},"  -Wall\n",[51,1362,1364],{"class":53,"line":1363},17,[51,1365,1366],{"class":61},"  -Wextra\n",[51,1368,1370],{"class":53,"line":1369},18,[51,1371,1372],{"class":61},"  -Wpedantic\n",[51,1374,1376],{"class":53,"line":1375},19,[51,1377,123],{"class":61},[10,1379,1380],{},"This file is only for project-wide options and does not include third-party dependencies like Eigen or OpenCV.",[33,1382,1384],{"id":1383},"cmake_cxx_standard",[21,1385,1386],{},"CMAKE_CXX_STANDARD",[42,1388,1390],{"className":44,"code":1389,"language":46,"meta":47,"style":47},"set(CMAKE_CXX_STANDARD 17)\n",[21,1391,1392],{"__ignoreMap":47},[51,1393,1394,1396],{"class":53,"line":54},[51,1395,1219],{"class":57},[51,1397,1222],{"class":61},[10,1399,1400],{},"Set default C++ standard.",[10,1402,598],{},[224,1404,1405,1414],{},[227,1406,1407],{},[230,1408,1409,1411],{},[233,1410,365],{"align":235},[233,1412,1413],{"align":235},"Standard",[241,1415,1416,1426,1436,1446,1456],{},[230,1417,1418,1423],{},[246,1419,1420],{"align":235},[21,1421,1422],{},"11",[246,1424,1425],{"align":235},"C++11",[230,1427,1428,1433],{},[246,1429,1430],{"align":235},[21,1431,1432],{},"14",[246,1434,1435],{"align":235},"C++14",[230,1437,1438,1443],{},[246,1439,1440],{"align":235},[21,1441,1442],{},"17",[246,1444,1445],{"align":235},"C++17",[230,1447,1448,1453],{},[246,1449,1450],{"align":235},[21,1451,1452],{},"20",[246,1454,1455],{"align":235},"C++20",[230,1457,1458,1463],{},[246,1459,1460],{"align":235},[21,1461,1462],{},"23",[246,1464,1465],{"align":235},"C++23",[10,1467,1468],{},"This template uses C++17:",[42,1470,1471],{"className":44,"code":1389,"language":46,"meta":47,"style":47},[21,1472,1473],{"__ignoreMap":47},[51,1474,1475,1477],{"class":53,"line":54},[51,1476,1219],{"class":57},[51,1478,1222],{"class":61},[10,1480,1481],{},"If you want to use C++20:",[42,1483,1485],{"className":44,"code":1484,"language":46,"meta":47,"style":47},"set(CMAKE_CXX_STANDARD 20)\ntarget_compile_features(project_options INTERFACE cxx_std_20)\n",[21,1486,1487,1494],{"__ignoreMap":47},[51,1488,1489,1491],{"class":53,"line":54},[51,1490,1219],{"class":57},[51,1492,1493],{"class":61},"(CMAKE_CXX_STANDARD 20)\n",[51,1495,1496,1498,1500,1502],{"class":53,"line":72},[51,1497,1319],{"class":57},[51,1499,1308],{"class":61},[51,1501,1311],{"class":65},[51,1503,1504],{"class":61}," cxx_std_20)\n",[10,1506,1507],{},"It's best to change both places together.",[33,1509,1511],{"id":1510},"cmake_cxx_standard_required",[21,1512,1513],{},"CMAKE_CXX_STANDARD_REQUIRED",[42,1515,1517],{"className":44,"code":1516,"language":46,"meta":47,"style":47},"set(CMAKE_CXX_STANDARD_REQUIRED ON)\n",[21,1518,1519],{"__ignoreMap":47},[51,1520,1521,1523,1525,1527],{"class":53,"line":54},[51,1522,1219],{"class":57},[51,1524,1229],{"class":61},[51,1526,1232],{"class":57},[51,1528,123],{"class":61},[10,1530,1531],{},"Purpose: This specifies that the compiler must support the designated C++ standard.",[10,1533,182],{},[224,1535,1536,1544],{},[227,1537,1538],{},[230,1539,1540,1542],{},[233,1541,365],{"align":235},[233,1543,239],{"align":235},[241,1545,1546,1555],{},[230,1547,1548,1552],{},[246,1549,1550],{"align":235},[21,1551,1232],{},[246,1553,1554],{"align":235},"Must use the specified standard; report an error if unsupported.",[230,1556,1557,1561],{},[246,1558,1559],{"align":235},[21,1560,1244],{},[246,1562,1563],{"align":235},"may fall back to a lower standard when not supported",[10,1565,1566,1567,1569],{},"The template recommends ",[21,1568,1232],{},". Otherwise, you might think you're using C++17, but the compiler could revert to an older standard, making the errors more subtle.",[33,1571,1573],{"id":1572},"cmake_cxx_extensions",[21,1574,1575],{},"CMAKE_CXX_EXTENSIONS",[42,1577,1579],{"className":44,"code":1578,"language":46,"meta":47,"style":47},"set(CMAKE_CXX_EXTENSIONS OFF)\n",[21,1580,1581],{"__ignoreMap":47},[51,1582,1583,1585,1587,1589],{"class":53,"line":54},[51,1584,1219],{"class":57},[51,1586,1241],{"class":61},[51,1588,1244],{"class":57},[51,1590,123],{"class":61},[10,1592,1593],{},"Purpose: Controls whether to use the compiler extension standard.",[10,1595,182],{},[224,1597,1598,1609],{},[227,1599,1600],{},[230,1601,1602,1604,1607],{},[233,1603,365],{"align":235},[233,1605,1606],{"align":235},"compiler option preferences",[233,1608,239],{"align":235},[241,1610,1611,1625],{},[230,1612,1613,1617,1622],{},[246,1614,1615],{"align":235},[21,1616,1232],{},[246,1618,1619],{"align":235},[21,1620,1621],{},"gnu++17",[246,1623,1624],{"align":235},"Allow GNU Extensions",[230,1626,1627,1631,1636],{},[246,1628,1629],{"align":235},[21,1630,1244],{},[246,1632,1633],{"align":235},[21,1634,1635],{},"c++17",[246,1637,1638],{"align":235},"more standardized and more portable",[10,1640,1641,1642,1644],{},"For Linux-only projects, it's also recommended to write ",[21,1643,1244],{}," first, so the code is closer to standard C++.",[33,1646,1648],{"id":1647},"c-standard-compliance-options","C standard compliance options",[42,1650,1652],{"className":44,"code":1651,"language":46,"meta":47,"style":47},"set(CMAKE_C_STANDARD 11)\nset(CMAKE_C_STANDARD_REQUIRED ON)\nset(CMAKE_C_EXTENSIONS OFF)\n",[21,1653,1654,1660,1670],{"__ignoreMap":47},[51,1655,1656,1658],{"class":53,"line":54},[51,1657,1219],{"class":57},[51,1659,1257],{"class":61},[51,1661,1662,1664,1666,1668],{"class":53,"line":72},[51,1663,1219],{"class":57},[51,1665,1264],{"class":61},[51,1667,1232],{"class":57},[51,1669,123],{"class":61},[51,1671,1672,1674,1676,1678],{"class":53,"line":79},[51,1673,1219],{"class":57},[51,1675,1275],{"class":61},[51,1677,1244],{"class":57},[51,1679,123],{"class":61},[10,1681,1682],{},"The meaning is similar to the corresponding options in C++.",[10,1684,1685],{},"Common C Standards:",[224,1687,1688,1696],{},[227,1689,1690],{},[230,1691,1692,1694],{},[233,1693,365],{"align":235},[233,1695,1413],{"align":235},[241,1697,1698,1708,1717,1726],{},[230,1699,1700,1705],{},[246,1701,1702],{"align":235},[21,1703,1704],{},"99",[246,1706,1707],{"align":235},"C99",[230,1709,1710,1714],{},[246,1711,1712],{"align":235},[21,1713,1422],{},[246,1715,1716],{"align":235},"C11",[230,1718,1719,1723],{},[246,1720,1721],{"align":235},[21,1722,1442],{},[246,1724,1725],{"align":235},"C17",[230,1727,1728,1732],{},[246,1729,1730],{"align":235},[21,1731,1462],{},[246,1733,1734],{"align":235},"C23",[10,1736,1737,1738,1741],{},"If the project does not have the ",[21,1739,1740],{},".c"," file, you can also enable only C++:",[42,1743,1744],{"className":44,"code":664,"language":46,"meta":47,"style":47},[21,1745,1746],{"__ignoreMap":47},[51,1747,1748,1750,1752,1754],{"class":53,"line":54},[51,1749,82],{"class":57},[51,1751,85],{"class":61},[51,1753,66],{"class":65},[51,1755,677],{"class":61},[10,1757,1758],{},"Then remove the C standard related settings.",[33,1760,1762],{"id":1761},"cmake_export_compile_commands",[21,1763,1764],{},"CMAKE_EXPORT_COMPILE_COMMANDS",[42,1766,1768],{"className":44,"code":1767,"language":46,"meta":47,"style":47},"set(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n",[21,1769,1770],{"__ignoreMap":47},[51,1771,1772,1774,1776,1778],{"class":53,"line":54},[51,1773,1219],{"class":57},[51,1775,1290],{"class":61},[51,1777,1232],{"class":57},[51,1779,123],{"class":61},[10,1781,1782,1783,1119],{},"Function: Generates ",[21,1784,1785],{},"compile_commands.json",[10,1787,1788],{},"I can assist with the translation, but it appears the content you'd like me to translate is missing from your message.",[10,1790,1791],{},"Please provide the complete text (Chinese Markdown fragment) you want translated into American English.",[224,1793,1794,1802],{},[227,1795,1796],{},[230,1797,1798,1800],{},[233,1799,365],{"align":235},[233,1801,239],{"align":235},[241,1803,1804,1813],{},[230,1805,1806,1810],{},[246,1807,1808],{"align":235},[21,1809,1232],{},[246,1811,1812],{"align":235},"Generate",[230,1814,1815,1819],{},[246,1816,1817],{"align":235},[21,1818,1244],{},[246,1820,1821],{"align":235},"Do not generate",[10,1823,1824,1825,1828],{},"This option is also described in the ",[21,1826,1827],{},"CMakePresets.json"," references:",[42,1830,1834],{"className":1831,"code":1832,"language":1833,"meta":47,"style":47},"language-json shiki shiki-themes github-light github-dark","\"CMAKE_EXPORT_COMPILE_COMMANDS\": \"ON\"\n","json",[21,1835,1836],{"__ignoreMap":47},[51,1837,1838,1841,1844],{"class":53,"line":54},[51,1839,1840],{"class":119},"\"CMAKE_EXPORT_COMPILE_COMMANDS\"",[51,1842,1843],{"class":61},": ",[51,1845,1846],{"class":119},"\"ON\"\n",[10,1848,1849,1850,1853],{},"It's not conflicting to have both in two places. The advantage of a preset is that the configuration is clearly visible in both the IDE and command line; the benefit of ",[21,1851,1852],{},"ProjectOptions.cmake"," is that it enables the feature by default, even without using the preset.",[33,1855,1857],{"id":1856},"add_libraryproject_options-interface",[21,1858,1859],{},"add_library(project_options INTERFACE)",[42,1861,1863],{"className":44,"code":1862,"language":46,"meta":47,"style":47},"add_library(project_options INTERFACE)\n",[21,1864,1865],{"__ignoreMap":47},[51,1866,1867,1869,1871,1873],{"class":53,"line":54},[51,1868,1305],{"class":57},[51,1870,1308],{"class":61},[51,1872,1311],{"class":65},[51,1874,123],{"class":61},[10,1876,1877],{},"Create an interface target.",[10,1879,1880,1882,1883,759,1886,1889],{},[21,1881,1311],{}," target has no source code and will not generate ",[21,1884,1885],{},".a",[21,1887,1888],{},".so",". It is only used to carry \"usage requirements\" such as compile features, macro definitions, include paths, and linker dependencies.",[10,1891,1892,1894],{},[21,1893,1305],{}," Common types:",[224,1896,1897,1912],{},[227,1898,1899],{},[230,1900,1901,1904,1907,1910],{},[233,1902,1903],{"align":235},"type",[233,1905,1906],{"align":235},"Is there source code available?",[233,1908,1909],{"align":235},"Whether to generate output",[233,1911,729],{"align":235},[241,1913,1914,1931,1947,1961,1979],{},[230,1915,1916,1921,1924,1928],{},[246,1917,1918],{"align":235},[21,1919,1920],{},"STATIC",[246,1922,1923],{"align":235},"There is",[246,1925,1926],{"align":235},[21,1927,1885],{},[246,1929,1930],{"align":235},"Static library",[230,1932,1933,1938,1940,1944],{},[246,1934,1935],{"align":235},[21,1936,1937],{},"SHARED",[246,1939,1923],{"align":235},[246,1941,1942],{"align":235},[21,1943,1888],{},[246,1945,1946],{"align":235},"dynamic library",[230,1948,1949,1954,1956,1959],{},[246,1950,1951],{"align":235},[21,1952,1953],{},"MODULE",[246,1955,1923],{"align":235},[246,1957,1958],{"align":235},"Plug-in Dynamic Module",[246,1960],{"align":235},[230,1962,1963,1968,1970,1976],{},[246,1964,1965],{"align":235},[21,1966,1967],{},"OBJECT",[246,1969,1923],{"align":235},[246,1971,1972,1975],{"align":235},[21,1973,1974],{},".o"," set",[246,1977,1978],{"align":235},"Reuse object files",[230,1980,1981,1985,1988,1990],{},[246,1982,1983],{"align":235},[21,1984,1311],{},[246,1986,1987],{"align":235},"None",[246,1989,1987],{"align":235},[246,1991,1992],{"align":235},"Pass configuration",[10,1994,1995],{},"This template uses:",[42,1997,1999],{"className":44,"code":1998,"language":46,"meta":47,"style":47},"project_options\n",[21,2000,2001],{"__ignoreMap":47},[51,2002,2003],{"class":53,"line":54},[51,2004,1998],{"class":61},[10,2006,2007],{},"Save C++ standard requirements.",[33,2009,2010],{"id":1319},[21,2011,1319],{},[42,2013,2015],{"className":44,"code":2014,"language":46,"meta":47,"style":47},"target_compile_features(project_options INTERFACE cxx_std_17)\n",[21,2016,2017],{"__ignoreMap":47},[51,2018,2019,2021,2023,2025],{"class":53,"line":54},[51,2020,1319],{"class":57},[51,2022,1308],{"class":61},[51,2024,1311],{"class":65},[51,2026,1326],{"class":61},[10,2028,2029],{},"Purpose: Declares that the target using this target requires C++17.",[10,2031,182],{},[224,2033,2034,2042],{},[227,2035,2036],{},[230,2037,2038,2040],{},[233,2039,236],{"align":235},[233,2041,239],{"align":235},[241,2043,2044,2054,2064,2074,2084],{},[230,2045,2046,2051],{},[246,2047,2048],{"align":235},[21,2049,2050],{},"cxx_std_11",[246,2052,2053],{"align":235},"At least C++11",[230,2055,2056,2061],{},[246,2057,2058],{"align":235},[21,2059,2060],{},"cxx_std_14",[246,2062,2063],{"align":235},"At least C++14",[230,2065,2066,2071],{},[246,2067,2068],{"align":235},[21,2069,2070],{},"cxx_std_17",[246,2072,2073],{"align":235},"At least C++17",[230,2075,2076,2081],{},[246,2077,2078],{"align":235},[21,2079,2080],{},"cxx_std_20",[246,2082,2083],{"align":235},"At least C++20",[230,2085,2086,2091],{},[246,2087,2088],{"align":235},[21,2089,2090],{},"cxx_std_23",[246,2092,2093],{"align":235},"At least C++23.",[10,2095,2096,2097,2100,2101,2104],{},"C++23 is the latest standard, building on C++20 with new features like ",[21,2098,2099],{},"std::expected",", ",[21,2102,2103],{},"std::mdspan",", and further library improvements.|",[10,2106,2107],{},"Why is C++17 mentioned again here?",[42,2109,2110],{"className":44,"code":1389,"language":46,"meta":47,"style":47},[21,2111,2112],{"__ignoreMap":47},[51,2113,2114,2116],{"class":53,"line":54},[51,2115,1219],{"class":57},[51,2117,1222],{"class":61},[10,2119,2120],{},"It's the global default value.",[42,2122,2123],{"className":44,"code":2014,"language":46,"meta":47,"style":47},[21,2124,2125],{"__ignoreMap":47},[51,2126,2127,2129,2131,2133],{"class":53,"line":54},[51,2128,1319],{"class":57},[51,2130,1308],{"class":61},[51,2132,1311],{"class":65},[51,2134,1326],{"class":61},[10,2136,2137],{},"It's about target-level requirements. Modern CMake favors target-level requirements more because they can propagate with target linking relationships.",[33,2139,2141],{"id":2140},"add_libraryproject_warnings-interface",[21,2142,2143],{},"add_library(project_warnings INTERFACE)",[42,2145,2147],{"className":44,"code":2146,"language":46,"meta":47,"style":47},"add_library(project_warnings INTERFACE)\n",[21,2148,2149],{"__ignoreMap":47},[51,2150,2151,2153,2155,2157],{"class":53,"line":54},[51,2152,1305],{"class":57},[51,2154,1339],{"class":61},[51,2156,1311],{"class":65},[51,2158,123],{"class":61},[10,2160,2161],{},"Create an interface target specifically for storing warning options.",[10,2163,2164],{},"This way each target can choose whether to link.",[42,2166,2168],{"className":44,"code":2167,"language":46,"meta":47,"style":47},"target_link_libraries(my_target\n  PRIVATE\n    project_warnings\n)\n",[21,2169,2170,2178,2183,2188],{"__ignoreMap":47},[51,2171,2172,2175],{"class":53,"line":54},[51,2173,2174],{"class":57},"target_link_libraries",[51,2176,2177],{"class":61},"(my_target\n",[51,2179,2180],{"class":53,"line":72},[51,2181,2182],{"class":65},"  PRIVATE\n",[51,2184,2185],{"class":53,"line":79},[51,2186,2187],{"class":61},"    project_warnings\n",[51,2189,2190],{"class":53,"line":93},[51,2191,123],{"class":61},[33,2193,2194],{"id":1349},[21,2195,1349],{},[42,2197,2199],{"className":44,"code":2198,"language":46,"meta":47,"style":47},"target_compile_options(project_warnings INTERFACE\n  -Wall\n  -Wextra\n  -Wpedantic\n)\n",[21,2200,2201,2209,2213,2217,2221],{"__ignoreMap":47},[51,2202,2203,2205,2207],{"class":53,"line":54},[51,2204,1349],{"class":57},[51,2206,1339],{"class":61},[51,2208,1354],{"class":65},[51,2210,2211],{"class":53,"line":72},[51,2212,1360],{"class":61},[51,2214,2215],{"class":53,"line":79},[51,2216,1366],{"class":61},[51,2218,2219],{"class":53,"line":93},[51,2220,1372],{"class":61},[51,2222,2223],{"class":53,"line":98},[51,2224,123],{"class":61},[10,2226,2227],{},"Purpose: Add compilation options to the target.",[10,2229,2230],{},"This template option:",[224,2232,2233,2243],{},[227,2234,2235],{},[230,2236,2237,2240],{},[233,2238,2239],{"align":235},"option",[233,2241,2242],{"align":235},"effect",[241,2244,2245,2255,2265],{},[230,2246,2247,2252],{},[246,2248,2249],{"align":235},[21,2250,2251],{},"-Wall",[246,2253,2254],{"align":235},"Enable a set of common warnings",[230,2256,2257,2262],{},[246,2258,2259],{"align":235},[21,2260,2261],{},"-Wextra",[246,2263,2264],{"align":235},"Enable more warnings",[230,2266,2267,2272],{},[246,2268,2269],{"align":235},[21,2270,2271],{},"-Wpedantic",[246,2273,2274],{"align":235},"remind about non-standard writing practices",[10,2276,2277],{},"Common additional options:",[224,2279,2280,2288],{},[227,2281,2282],{},[230,2283,2284,2286],{},[233,2285,2239],{"align":235},[233,2287,239],{"align":235},[241,2289,2290,2300,2310],{},[230,2291,2292,2297],{},[246,2293,2294],{"align":235},[21,2295,2296],{},"-Wconversion",[246,2298,2299],{"align":235},"Warning: Casting may result in loss of information",[230,2301,2302,2307],{},[246,2303,2304],{"align":235},[21,2305,2306],{},"-Wshadow",[246,2308,2309],{"align":235},"Warning on variable name shadowing",[230,2311,2312,2317],{},[246,2313,2314],{"align":235},[21,2315,2316],{},"-Werror",[246,2318,2319],{"align":235},"Treat warnings as errors.",[10,2321,2322,2323,2325],{},"It is not recommended to add the template default ",[21,2324,2316],{},". Because different compilers and third-party header files may generate different warnings, beginners can easily get stuck at this stage.",[33,2327,2329,2330,2100,2333,2100,2336],{"id":2328},"the-intuition-of-public-private-interface","The intuition of ",[21,2331,2332],{},"PUBLIC",[21,2334,2335],{},"PRIVATE",[21,2337,1311],{},[10,2339,2340],{},"The following CMake files will appear extensively:",[42,2342,2344],{"className":44,"code":2343,"language":46,"meta":47,"style":47},"PUBLIC\nPRIVATE\nINTERFACE\n",[21,2345,2346,2351,2356],{"__ignoreMap":47},[51,2347,2348],{"class":53,"line":54},[51,2349,2350],{"class":65},"PUBLIC\n",[51,2352,2353],{"class":53,"line":72},[51,2354,2355],{"class":65},"PRIVATE\n",[51,2357,2358],{"class":53,"line":79},[51,2359,1354],{"class":65},[10,2361,2362],{},"They control \"whether attributes are passed to users.\"",[224,2364,2365,2379],{},[227,2366,2367],{},[230,2368,2369,2372,2376],{},[233,2370,2371],{"align":235},"Keywords",[233,2373,2375],{"align":2374},"center","For my own use",[233,2377,2378],{"align":2374},"Pass to others.",[241,2380,2381,2393,2403],{},[230,2382,2383,2387,2390],{},[246,2384,2385],{"align":235},[21,2386,2335],{},[246,2388,2389],{"align":2374},"Yes",[246,2391,2392],{"align":2374},"No",[230,2394,2395,2399,2401],{},[246,2396,2397],{"align":235},[21,2398,2332],{},[246,2400,2389],{"align":2374},[246,2402,2389],{"align":2374},[230,2404,2405,2409,2411],{},[246,2406,2407],{"align":235},[21,2408,1311],{},[246,2410,2392],{"align":2374},[246,2412,2389],{"align":2374},[10,2414,2415],{},"For example:",[42,2417,2419],{"className":44,"code":2418,"language":46,"meta":47,"style":47},"target_link_libraries(lib1_src_lib\n  PUBLIC\n    project_options\n  PRIVATE\n    project_warnings\n)\n",[21,2420,2421,2428,2433,2438,2442,2446],{"__ignoreMap":47},[51,2422,2423,2425],{"class":53,"line":54},[51,2424,2174],{"class":57},[51,2426,2427],{"class":61},"(lib1_src_lib\n",[51,2429,2430],{"class":53,"line":72},[51,2431,2432],{"class":65},"  PUBLIC\n",[51,2434,2435],{"class":53,"line":79},[51,2436,2437],{"class":61},"    project_options\n",[51,2439,2440],{"class":53,"line":93},[51,2441,2182],{"class":65},[51,2443,2444],{"class":53,"line":98},[51,2445,2187],{"class":61},[51,2447,2448],{"class":53,"line":107},[51,2449,123],{"class":61},[10,2451,2452],{},"Meaning:",[14,2454,2455,2464,2472],{},[17,2456,2457,2458,688,2461,1119],{},"I need ",[21,2459,2460],{},"lib1_src_lib",[21,2462,2463],{},"project_options",[17,2465,2466,2467,2469,2470,1119],{},"The link to ",[21,2468,2460],{}," also gets ",[21,2471,2463],{},[17,2473,2474,2477,2478,2480],{},[21,2475,2476],{},"project_warnings"," is only used for compiling ",[21,2479,2460],{}," itself, not forcing downstream to enable the same warnings.",[2482,2483,2484],"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 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);}",{"title":47,"searchDepth":72,"depth":72,"links":2486},[2487,2489,2490,2495,2496,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511],{"id":35,"depth":72,"text":2488},"Top Level CMakeLists.txt",{"id":58,"depth":72,"text":58},{"id":82,"depth":72,"text":82,"children":2491},[2492,2493,2494],{"id":337,"depth":79,"text":338},{"id":467,"depth":79,"text":66},{"id":580,"depth":79,"text":583},{"id":695,"depth":72,"text":698},{"id":951,"depth":72,"text":954,"children":2497},[2498,2499],{"id":101,"depth":79,"text":977},{"id":1059,"depth":79,"text":1062},{"id":1095,"depth":72,"text":1098},{"id":1204,"depth":72,"text":28},{"id":1383,"depth":72,"text":1386},{"id":1510,"depth":72,"text":1513},{"id":1572,"depth":72,"text":1575},{"id":1647,"depth":72,"text":1648},{"id":1761,"depth":72,"text":1764},{"id":1856,"depth":72,"text":1859},{"id":1319,"depth":72,"text":1319},{"id":2140,"depth":72,"text":2143},{"id":1349,"depth":72,"text":1349},{"id":2328,"depth":72,"text":2512},"The intuition of PUBLIC, PRIVATE, INTERFACE","\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","2200-0200","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","en-us:2023-10-05-cplusplus-jiao-xue","\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项",false,null,"en-US","en-us",{},{"title":5,"description":12},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","sBC4YMAA6HU0MMiGP6VBV7pBDGlJEZJ2pagkRMg4_TI",[2532,2538,2543,2548,2553,2558,2563,2568,2573,2578,2583,2588,2593,2598,2603,2608,2613,2618,2623,2628,2633,2638,2643,2648,2653,2658,2663,2668,2673,2678,2683,2688,2693,2698,2703,2708,2713,2718,2723,2728,2733,2738,2743,2748,2753,2758,2763,2768,2773,2778,2783,2788,2793,2798,2803,2808,2813,2818,2823,2828,2833,2838,2843,2848,2853,2858,2863,2868,2873,2878,2883,2888,2893,2898,2903,2908,2913,2914,2919,2924,2929,2934],{"path":2533,"stem":2534,"title":2535,"date":2515,"chapterOrder":2536,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++ Development Environment Setup and Testing","0100",0,{"path":2539,"stem":2540,"title":2541,"date":2515,"chapterOrder":2542,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++ Basics","0200",{"path":2544,"stem":2545,"title":2546,"date":2515,"chapterOrder":2547,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","Data Types and Data Storage","0300",{"path":2549,"stem":2550,"title":2551,"date":2515,"chapterOrder":2552,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","Input and Output","0400",{"path":2554,"stem":2555,"title":2556,"date":2515,"chapterOrder":2557,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","operator","0500",{"path":2559,"stem":2560,"title":2561,"date":2515,"chapterOrder":2562,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","program flow structure","0600",{"path":2564,"stem":2565,"title":2566,"date":2515,"chapterOrder":2567,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","array","0700",{"path":2569,"stem":2570,"title":2571,"date":2515,"chapterOrder":2572,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","Functions and Header Files","0800",{"path":2574,"stem":2575,"title":2576,"date":2515,"chapterOrder":2577,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","pointer","0900",{"path":2579,"stem":2580,"title":2581,"date":2515,"chapterOrder":2582,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","Structures and Unions","1000",{"path":2584,"stem":2585,"title":2586,"date":2515,"chapterOrder":2587,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","Memory Partitioning and Lifecycle","1100",{"path":2589,"stem":2590,"title":2591,"date":2515,"chapterOrder":2592,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","reference","1200",{"path":2594,"stem":2595,"title":2596,"date":2515,"chapterOrder":2597,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","Advanced Functions and Namespaces","1300",{"path":2599,"stem":2600,"title":2601,"date":2515,"chapterOrder":2602,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","encapsulation","1400-0100",{"path":2604,"stem":2605,"title":2606,"date":2515,"chapterOrder":2607,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","Object initialization and cleanup","1400-0200",{"path":2609,"stem":2610,"title":2611,"date":2515,"chapterOrder":2612,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","Object Model and the `this` Pointer","1400-0300",{"path":2614,"stem":2615,"title":2616,"date":2515,"chapterOrder":2617,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","Friends and operator overloading","1400-0400",{"path":2619,"stem":2620,"title":2621,"date":2515,"chapterOrder":2622,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","inheritance","1400-0500",{"path":2624,"stem":2625,"title":2626,"date":2515,"chapterOrder":2627,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","polymorphism","1400-0600",{"path":2629,"stem":2630,"title":2631,"date":2515,"chapterOrder":2632,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","Classes and Objects","1400",{"path":2634,"stem":2635,"title":2636,"date":2515,"chapterOrder":2637,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","File operations","1500",{"path":2639,"stem":2640,"title":2641,"date":2515,"chapterOrder":2642,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":2644,"stem":2645,"title":2646,"date":2515,"chapterOrder":2647,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","template","1700",{"path":2649,"stem":2650,"title":2651,"date":2515,"chapterOrder":2652,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","Introduction to STL","1800-0100",{"path":2654,"stem":2655,"title":2656,"date":2515,"chapterOrder":2657,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":2659,"stem":2660,"title":2661,"date":2515,"chapterOrder":2662,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string container","1800-0300",{"path":2664,"stem":2665,"title":2666,"date":2515,"chapterOrder":2667,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":2669,"stem":2670,"title":2671,"date":2515,"chapterOrder":2672,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":2674,"stem":2675,"title":2676,"date":2515,"chapterOrder":2677,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":2679,"stem":2680,"title":2681,"date":2515,"chapterOrder":2682,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue container","1800-0700",{"path":2684,"stem":2685,"title":2686,"date":2515,"chapterOrder":2687,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":2689,"stem":2690,"title":2691,"date":2515,"chapterOrder":2692,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":2694,"stem":2695,"title":2696,"date":2515,"chapterOrder":2697,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":2699,"stem":2700,"title":2701,"date":2515,"chapterOrder":2702,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","Function objects and predicates","1800-1100",{"path":2704,"stem":2705,"title":2706,"date":2515,"chapterOrder":2707,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","Common algorithms","1800-1200",{"path":2709,"stem":2710,"title":2711,"date":2515,"chapterOrder":2712,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","Level up your programming with STL.","1800",{"path":2714,"stem":2715,"title":2716,"date":2515,"chapterOrder":2717,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++ Type Casting","1900",{"path":2719,"stem":2720,"title":2721,"date":2515,"chapterOrder":2722,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto","2000-0100",{"path":2724,"stem":2725,"title":2726,"date":2515,"chapterOrder":2727,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":2729,"stem":2730,"title":2731,"date":2515,"chapterOrder":2732,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":2734,"stem":2735,"title":2736,"date":2515,"chapterOrder":2737,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":2739,"stem":2740,"title":2741,"date":2515,"chapterOrder":2742,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","range-based for loop","2000-0500",{"path":2744,"stem":2745,"title":2746,"date":2515,"chapterOrder":2747,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","structured binding","2000-0600",{"path":2749,"stem":2750,"title":2751,"date":2515,"chapterOrder":2752,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":2754,"stem":2755,"title":2756,"date":2515,"chapterOrder":2757,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":2759,"stem":2760,"title":2761,"date":2515,"chapterOrder":2762,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","Smart pointer","2000-0900",{"path":2764,"stem":2765,"title":2766,"date":2515,"chapterOrder":2767,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","Rvalue references and move semantics","2000-1000",{"path":2769,"stem":2770,"title":2771,"date":2515,"chapterOrder":2772,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda expression","2000-1100",{"path":2774,"stem":2775,"title":2776,"date":2515,"chapterOrder":2777,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":2779,"stem":2780,"title":2781,"date":2515,"chapterOrder":2782,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":2784,"stem":2785,"title":2786,"date":2515,"chapterOrder":2787,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":2789,"stem":2790,"title":2791,"date":2515,"chapterOrder":2792,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":2794,"stem":2795,"title":2796,"date":2515,"chapterOrder":2797,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":2799,"stem":2800,"title":2801,"date":2515,"chapterOrder":2802,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":2804,"stem":2805,"title":2806,"date":2515,"chapterOrder":2807,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":2809,"stem":2810,"title":2811,"date":2515,"chapterOrder":2812,"chapterDepth":72,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread and join","2000-1900-0100",{"path":2814,"stem":2815,"title":2816,"date":2515,"chapterOrder":2817,"chapterDepth":72,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 与 lock_guard","2000-1900-0200",{"path":2819,"stem":2820,"title":2821,"date":2515,"chapterOrder":2822,"chapterDepth":72,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":2824,"stem":2825,"title":2826,"date":2515,"chapterOrder":2827,"chapterDepth":72,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":2829,"stem":2830,"title":2831,"date":2515,"chapterOrder":2832,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","Concurrent programming","2000-1900",{"path":2834,"stem":2835,"title":2836,"date":2515,"chapterOrder":2837,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":2839,"stem":2840,"title":2841,"date":2515,"chapterOrder":2842,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","Modules Introduction","2000-2100",{"path":2844,"stem":2845,"title":2846,"date":2515,"chapterOrder":2847,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","Modern C++","2000",{"path":2849,"stem":2850,"title":2851,"date":2515,"chapterOrder":2852,"chapterDepth":72,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","Timers and Asynchronous I\u002FO","2100-0100-0100",{"path":2854,"stem":2855,"title":2856,"date":2515,"chapterOrder":2857,"chapterDepth":72,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio Basics","2100-0100-0200",{"path":2859,"stem":2860,"title":2861,"date":2515,"chapterOrder":2862,"chapterDepth":72,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","serial communication","2100-0100-0300",{"path":2864,"stem":2865,"title":2866,"date":2515,"chapterOrder":2867,"chapterDepth":72,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP communication","2100-0100-0400",{"path":2869,"stem":2870,"title":2871,"date":2515,"chapterOrder":2872,"chapterDepth":72,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP communication","2100-0100-0500",{"path":2874,"stem":2875,"title":2876,"date":2515,"chapterOrder":2877,"chapterDepth":72,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","Robot Engineering Approach and ROS2 Integration","2100-0100-0600",{"path":2879,"stem":2880,"title":2881,"date":2515,"chapterOrder":2882,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio asynchronous IO library","2100-0100",{"path":2884,"stem":2885,"title":2886,"date":2515,"chapterOrder":2887,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen linear algebra library","2100-0200",{"path":2889,"stem":2890,"title":2891,"date":2515,"chapterOrder":2892,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV Computer Vision Library","2100-0300",{"path":2894,"stem":2895,"title":2896,"date":2515,"chapterOrder":2897,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL Point Cloud Library","2100-0400",{"path":2899,"stem":2900,"title":2901,"date":2515,"chapterOrder":2902,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus Lie group and Lie algebra library","2100-0500",{"path":2904,"stem":2905,"title":2906,"date":2515,"chapterOrder":2907,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","Learning Common Libraries","2100",{"path":2909,"stem":2910,"title":2911,"date":2515,"chapterOrder":2912,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets and Build Installation","2200-0100",{"path":2513,"stem":2529,"title":5,"date":2515,"chapterOrder":2514,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},{"path":2915,"stem":2916,"title":2917,"date":2515,"chapterOrder":2918,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","Detailed CMake Explanation for src and lib Modules","2200-0300",{"path":2920,"stem":2921,"title":2922,"date":2515,"chapterOrder":2923,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","How to write third-party library dependencies","2200-0400",{"path":2925,"stem":2926,"title":2927,"date":2515,"chapterOrder":2928,"chapterDepth":54,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","Template Extensions and FAQ","2200-0500",{"path":2930,"stem":2931,"title":2932,"date":2515,"chapterOrder":2933,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":2522},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake Project Template","2200",{"path":2518,"stem":2935,"title":2936,"date":2515,"chapterOrder":2523,"chapterDepth":2537,"docKey":2517,"docRoot":2518,"docTitle":2519,"isWikiDoc":75,"isWikiIndex":75},"_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++ tutorial",{"variants":2938},[2939,2940,2943,2946,2949],{"path":2513,"localeSlug":2525,"i18nKey":2521},{"path":2941,"localeSlug":2942,"i18nKey":2521},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","zh-hant",{"path":2944,"localeSlug":2945,"i18nKey":2521},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","zh-hk",{"path":2947,"localeSlug":2948,"i18nKey":2521},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","zh-tw",{"path":2950,"localeSlug":2951,"i18nKey":2521},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","zh-cn",[2513,2528,2941,2528,2944,2528,2947,2528,2950,2528],1784646872430]