[{"data":1,"prerenderedAt":2934},["ShallowReactive",2],{"wiki-page-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang":3,"wiki-doc-items-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang":2512,"language-switcher-data-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang":2918,"wiki-i18n-paths-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang":2933},{"id":4,"title":5,"body":6,"canonicalPath":2494,"chapterDepth":54,"chapterOrder":2495,"date":2496,"description":12,"docI18nKey":2497,"docKey":2498,"docRoot":2499,"docTitle":2500,"extension":2501,"i18nKey":2502,"isBlogPost":2503,"isWikiDoc":75,"isWikiIndex":2503,"layout":2504,"legacyPath":2504,"locale":2505,"localeSlug":2506,"meta":2507,"navigation":75,"path":2494,"seo":2508,"sourcePath":2509,"sourceStem":2502,"stem":2510,"wikiDepth":54,"__hash__":2511},"content\u002F_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项.md","頂層CMake與公共編譯選項",{"type":7,"value":8,"toc":2466},"minimark",[9,13,29,32,38,41,138,143,147,162,165,176,179,216,219,290,293,297,312,314,328,332,344,347,385,392,419,422,430,433,449,452,458,463,475,478,480,505,508,568,571,577,586,589,592,652,655,671,686,692,703,706,709,803,806,826,838,841,867,870,912,915,942,948,963,966,971,976,979,1007,1010,1050,1056,1059,1065,1068,1077,1080,1086,1092,1103,1113,1115,1144,1147,1159,1162,1174,1177,1180,1190,1196,1201,1204,1372,1375,1381,1392,1395,1397,1460,1463,1473,1476,1499,1502,1508,1523,1526,1528,1558,1564,1570,1585,1588,1590,1633,1639,1643,1674,1677,1680,1729,1736,1750,1753,1759,1774,1780,1783,1813,1820,1838,1845,1851,1866,1869,1881,1886,1984,1987,1996,1999,2003,2018,2021,2023,2085,2088,2098,2101,2115,2118,2124,2139,2142,2145,2172,2176,2205,2208,2211,2255,2258,2300,2306,2319,2322,2341,2344,2394,2397,2431,2434,2462],[10,11,12],"p",{},"本節講兩個文件：",[14,15,16,24],"ol",{},[17,18,19,20],"li",{},"頂層 ",[21,22,23],"code",{},"CMakeLists.txt",[17,25,26],{},[21,27,28],{},"cmake\u002FProjectOptions.cmake",[10,30,31],{},"這兩個文件決定了整個工程的基本身份和公共編譯規則。",[33,34,19,36],"h2",{"id":35},"頂層-cmakeliststxt",[21,37,23],{},[10,39,40],{},"本模板的頂層文件如下：",[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,19,140,142],{},[21,141,23],{}," 的原則是：只做總控，不堆具體業務和第三方依賴。",[33,144,145],{"id":58},[21,146,58],{},[42,148,150],{"className":44,"code":149,"language":46,"meta":47,"style":47},"cmake_minimum_required(VERSION 3.25)\n",[21,151,152],{"__ignoreMap":47},[51,153,154,156,158,160],{"class":53,"line":54},[51,155,58],{"class":57},[51,157,62],{"class":61},[51,159,66],{"class":65},[51,161,69],{"class":61},[10,163,164],{},"作用：",[14,166,167,170,173],{},[17,168,169],{},"指定項目需要的最低 CMake 版本。",[17,171,172],{},"告訴 CMake 使用對應版本的策略行爲。",[17,174,175],{},"太老的 CMake 會直接報錯，不會繼續配置。",[10,177,178],{},"可以填什麼：",[42,180,182],{"className":44,"code":181,"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,183,184,195,205],{"__ignoreMap":47},[51,185,186,188,190,192],{"class":53,"line":54},[51,187,58],{"class":57},[51,189,62],{"class":61},[51,191,66],{"class":65},[51,193,194],{"class":61}," 3.20)\n",[51,196,197,199,201,203],{"class":53,"line":72},[51,198,58],{"class":57},[51,200,62],{"class":61},[51,202,66],{"class":65},[51,204,69],{"class":61},[51,206,207,209,211,213],{"class":53,"line":79},[51,208,58],{"class":57},[51,210,62],{"class":61},[51,212,66],{"class":65},[51,214,215],{"class":61}," 3.28)\n",[10,217,218],{},"選擇建議：",[220,221,222,236],"table",{},[223,224,225],"thead",{},[226,227,228,233],"tr",{},[229,230,232],"th",{"align":231},"left","寫法",[229,234,235],{"align":231},"說明",[237,238,239,250,260,270,280],"tbody",{},[226,240,241,247],{},[242,243,244],"td",{"align":231},[21,245,246],{},"3.10",[242,248,249],{"align":231},"太老，很多現代 CMake 寫法不方便",[226,251,252,257],{},[242,253,254],{"align":231},[21,255,256],{},"3.16",[242,258,259],{"align":231},"Ubuntu 20.04 常見版本，兼容性好",[226,261,262,267],{},[242,263,264],{"align":231},[21,265,266],{},"3.22",[242,268,269],{"align":231},"Ubuntu 22.04 常見版本",[226,271,272,277],{},[242,273,274],{"align":231},[21,275,276],{},"3.25",[242,278,279],{"align":231},"本模板使用，和 preset version 6 搭配",[226,281,282,287],{},[242,283,284],{"align":231},[21,285,286],{},"3.28+",[242,288,289],{"align":231},"適合較新的系統，但模板通用性下降",[10,291,292],{},"教學模板建議不要無限追新。只要滿足當前寫法即可。",[33,294,295],{"id":82},[21,296,82],{},[42,298,300],{"className":44,"code":299,"language":46,"meta":47,"style":47},"project(cmake_template VERSION 1.0.0 LANGUAGES C CXX)\n",[21,301,302],{"__ignoreMap":47},[51,303,304,306,308,310],{"class":53,"line":54},[51,305,82],{"class":57},[51,307,85],{"class":61},[51,309,66],{"class":65},[51,311,90],{"class":61},[10,313,164],{},[14,315,316,319,322,325],{},[17,317,318],{},"設置項目名。",[17,320,321],{},"設置項目版本。",[17,323,324],{},"聲明項目使用哪些語言。",[17,326,327],{},"初始化一批 CMake 變量。",[329,330,331],"h3",{"id":331},"項目名",[42,333,335],{"className":44,"code":334,"language":46,"meta":47,"style":47},"project(cmake_template)\n",[21,336,337],{"__ignoreMap":47},[51,338,339,341],{"class":53,"line":54},[51,340,82],{"class":57},[51,342,343],{"class":61},"(cmake_template)\n",[10,345,346],{},"項目名會影響這些變量：",[220,348,349,359],{},[223,350,351],{},[226,352,353,356],{},[229,354,355],{"align":231},"變量",[229,357,358],{"align":231},"值",[237,360,361,373],{},[226,362,363,368],{},[242,364,365],{"align":231},[21,366,367],{},"PROJECT_NAME",[242,369,370],{"align":231},[21,371,372],{},"cmake_template",[226,374,375,380],{},[242,376,377],{"align":231},[21,378,379],{},"CMAKE_PROJECT_NAME",[242,381,382,383],{"align":231},"頂層項目名，通常也是 ",[21,384,372],{},[10,386,387,388,391],{},"本模板在 ",[21,389,390],{},"src\u002FCMakeLists.txt"," 中使用：",[42,393,395],{"className":44,"code":394,"language":46,"meta":47,"style":47},"add_executable(${PROJECT_NAME}\n  ${CMAKE_CURRENT_SOURCE_DIR}\u002Fmain.cpp\n)\n",[21,396,397,407,415],{"__ignoreMap":47},[51,398,399,402,404],{"class":53,"line":54},[51,400,401],{"class":57},"add_executable",[51,403,62],{"class":61},[51,405,406],{"class":57},"${PROJECT_NAME}\n",[51,408,409,412],{"class":53,"line":72},[51,410,411],{"class":57},"  ${CMAKE_CURRENT_SOURCE_DIR}",[51,413,414],{"class":61},"\u002Fmain.cpp\n",[51,416,417],{"class":53,"line":79},[51,418,123],{"class":61},[10,420,421],{},"所以最終可執行文件名就是：",[42,423,428],{"className":424,"code":426,"language":427,"meta":47},[425],"language-text","cmake_template\n","text",[21,429,426],{"__ignoreMap":47},[10,431,432],{},"如果把項目名改成：",[42,434,436],{"className":44,"code":435,"language":46,"meta":47,"style":47},"project(robot_app VERSION 1.0.0 LANGUAGES C CXX)\n",[21,437,438],{"__ignoreMap":47},[51,439,440,442,445,447],{"class":53,"line":54},[51,441,82],{"class":57},[51,443,444],{"class":61},"(robot_app ",[51,446,66],{"class":65},[51,448,90],{"class":61},[10,450,451],{},"最終可執行文件就會變成：",[42,453,456],{"className":454,"code":455,"language":427,"meta":47},[425],"robot_app\n",[21,457,455],{"__ignoreMap":47},[329,459,461],{"id":460},"version",[21,462,66],{},[42,464,466],{"className":44,"code":465,"language":46,"meta":47,"style":47},"VERSION 1.0.0\n",[21,467,468],{"__ignoreMap":47},[51,469,470,472],{"class":53,"line":54},[51,471,66],{"class":65},[51,473,474],{"class":61}," 1.0.0\n",[10,476,477],{},"項目版本號。",[10,479,178],{},[42,481,483],{"className":44,"code":482,"language":46,"meta":47,"style":47},"VERSION 0.1.0\nVERSION 1.0.0\nVERSION 2.3.4\n",[21,484,485,492,498],{"__ignoreMap":47},[51,486,487,489],{"class":53,"line":54},[51,488,66],{"class":65},[51,490,491],{"class":61}," 0.1.0\n",[51,493,494,496],{"class":53,"line":72},[51,495,66],{"class":65},[51,497,474],{"class":61},[51,499,500,502],{"class":53,"line":79},[51,501,66],{"class":65},[51,503,504],{"class":61}," 2.3.4\n",[10,506,507],{},"CMake 會生成這些變量：",[220,509,510,519],{},[223,511,512],{},[226,513,514,516],{},[229,515,355],{"align":231},[229,517,518],{"align":231},"示例值",[237,520,521,533,545,557],{},[226,522,523,528],{},[242,524,525],{"align":231},[21,526,527],{},"PROJECT_VERSION",[242,529,530],{"align":231},[21,531,532],{},"1.0.0",[226,534,535,540],{},[242,536,537],{"align":231},[21,538,539],{},"PROJECT_VERSION_MAJOR",[242,541,542],{"align":231},[21,543,544],{},"1",[226,546,547,552],{},[242,548,549],{"align":231},[21,550,551],{},"PROJECT_VERSION_MINOR",[242,553,554],{"align":231},[21,555,556],{},"0",[226,558,559,564],{},[242,560,561],{"align":231},[21,562,563],{},"PROJECT_VERSION_PATCH",[242,565,566],{"align":231},[21,567,556],{},[10,569,570],{},"以後如果做安裝包、導出 CMake package、生成版本頭文件，這些變量會很有用。",[329,572,574],{"id":573},"languages",[21,575,576],{},"LANGUAGES",[42,578,580],{"className":44,"code":579,"language":46,"meta":47,"style":47},"LANGUAGES C CXX\n",[21,581,582],{"__ignoreMap":47},[51,583,584],{"class":53,"line":54},[51,585,579],{"class":61},[10,587,588],{},"聲明項目啓用哪些語言。",[10,590,591],{},"常見值：",[220,593,594,602],{},[223,595,596],{},[226,597,598,600],{},[229,599,358],{"align":231},[229,601,235],{"align":231},[237,603,604,614,624,633,643],{},[226,605,606,611],{},[242,607,608],{"align":231},[21,609,610],{},"C",[242,612,613],{"align":231},"C 語言",[226,615,616,621],{},[242,617,618],{"align":231},[21,619,620],{},"CXX",[242,622,623],{"align":231},"C++",[226,625,626,631],{},[242,627,628],{"align":231},[21,629,630],{},"CUDA",[242,632,630],{"align":231},[226,634,635,640],{},[242,636,637],{"align":231},[21,638,639],{},"ASM",[242,641,642],{"align":231},"彙編",[226,644,645,650],{},[242,646,647],{"align":231},[21,648,649],{},"Fortran",[242,651,649],{"align":231},[10,653,654],{},"如果項目只有 C++，也可以寫：",[42,656,658],{"className":44,"code":657,"language":46,"meta":47,"style":47},"project(cmake_template VERSION 1.0.0 LANGUAGES CXX)\n",[21,659,660],{"__ignoreMap":47},[51,661,662,664,666,668],{"class":53,"line":54},[51,663,82],{"class":57},[51,665,85],{"class":61},[51,667,66],{"class":65},[51,669,670],{"class":61}," 1.0.0 LANGUAGES CXX)\n",[10,672,673,674,677,678,681,682,685],{},"本模板保留 ",[21,675,676],{},"C CXX","，是爲了允許 ",[21,679,680],{},"src\u002F*.c"," 和 ",[21,683,684],{},"src\u002F*.cpp"," 都能參與構建。",[33,687,689],{"id":688},"includegnuinstalldirs",[21,690,691],{},"include(GNUInstallDirs)",[42,693,695],{"className":44,"code":694,"language":46,"meta":47,"style":47},"include(GNUInstallDirs)\n",[21,696,697],{"__ignoreMap":47},[51,698,699,701],{"class":53,"line":54},[51,700,101],{"class":57},[51,702,104],{"class":61},[10,704,705],{},"作用：加載 GNU 風格的安裝目錄變量。",[10,707,708],{},"常用變量：",[220,710,711,723],{},[223,712,713],{},[226,714,715,717,720],{},[229,716,355],{"align":231},[229,718,719],{"align":231},"常見值",[229,721,722],{"align":231},"用途",[237,724,725,740,759,773,788],{},[226,726,727,732,737],{},[242,728,729],{"align":231},[21,730,731],{},"CMAKE_INSTALL_BINDIR",[242,733,734],{"align":231},[21,735,736],{},"bin",[242,738,739],{"align":231},"可執行文件",[226,741,742,747,756],{},[242,743,744],{"align":231},[21,745,746],{},"CMAKE_INSTALL_LIBDIR",[242,748,749,752,753],{"align":231},[21,750,751],{},"lib"," 或 ",[21,754,755],{},"lib64",[242,757,758],{"align":231},"動態庫、靜態庫",[226,760,761,766,770],{},[242,762,763],{"align":231},[21,764,765],{},"CMAKE_INSTALL_INCLUDEDIR",[242,767,768],{"align":231},[21,769,101],{},[242,771,772],{"align":231},"頭文件",[226,774,775,780,785],{},[242,776,777],{"align":231},[21,778,779],{},"CMAKE_INSTALL_DATADIR",[242,781,782],{"align":231},[21,783,784],{},"share",[242,786,787],{"align":231},"數據文件",[226,789,790,795,800],{},[242,791,792],{"align":231},[21,793,794],{},"CMAKE_INSTALL_DOCDIR",[242,796,797],{"align":231},[21,798,799],{},"share\u002Fdoc\u002F项目名",[242,801,802],{"align":231},"文檔",[10,804,805],{},"爲什麼不用手寫：",[42,807,809],{"className":44,"code":808,"language":46,"meta":47,"style":47},"install(TARGETS app DESTINATION bin)\ninstall(TARGETS lib DESTINATION lib)\n",[21,810,811,819],{"__ignoreMap":47},[51,812,813,816],{"class":53,"line":54},[51,814,815],{"class":57},"install",[51,817,818],{"class":61},"(TARGETS app DESTINATION bin)\n",[51,820,821,823],{"class":53,"line":72},[51,822,815],{"class":57},[51,824,825],{"class":61},"(TARGETS lib DESTINATION lib)\n",[10,827,828,829,752,831,833,834,837],{},"因爲不同 Linux 發行版可能使用 ",[21,830,751],{},[21,832,755],{},"。用 ",[21,835,836],{},"GNUInstallDirs"," 後，CMake 會根據系統習慣設置。",[10,839,840],{},"模板中的使用示例：",[42,842,844],{"className":44,"code":843,"language":46,"meta":47,"style":47},"install(TARGETS ${PROJECT_NAME}\n  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}\n)\n",[21,845,846,855,863],{"__ignoreMap":47},[51,847,848,850,853],{"class":53,"line":54},[51,849,815],{"class":57},[51,851,852],{"class":61},"(TARGETS ",[51,854,406],{"class":57},[51,856,857,860],{"class":53,"line":72},[51,858,859],{"class":61},"  RUNTIME DESTINATION ",[51,861,862],{"class":57},"${CMAKE_INSTALL_BINDIR}\n",[51,864,865],{"class":53,"line":79},[51,866,123],{"class":61},[10,868,869],{},"庫安裝：",[42,871,873],{"className":44,"code":872,"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,874,875,887,895,902,908],{"__ignoreMap":47},[51,876,877,879,881,884],{"class":53,"line":54},[51,878,815],{"class":57},[51,880,852],{"class":61},[51,882,883],{"class":57},"${PREFIX}",[51,885,886],{"class":61},"_src_lib\n",[51,888,889,892],{"class":53,"line":72},[51,890,891],{"class":61},"  LIBRARY DESTINATION ",[51,893,894],{"class":57},"${CMAKE_INSTALL_LIBDIR}\n",[51,896,897,900],{"class":53,"line":79},[51,898,899],{"class":61},"  ARCHIVE DESTINATION ",[51,901,894],{"class":57},[51,903,904,906],{"class":53,"line":93},[51,905,859],{"class":61},[51,907,862],{"class":57},[51,909,910],{"class":53,"line":98},[51,911,123],{"class":61},[10,913,914],{},"頭文件安裝：",[42,916,918],{"className":44,"code":917,"language":46,"meta":47,"style":47},"install(DIRECTORY \"${CMAKE_CURRENT_LIST_DIR}\u002Finc\u002F\"\n  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}\n)\n",[21,919,920,930,938],{"__ignoreMap":47},[51,921,922,924,927],{"class":53,"line":54},[51,923,815],{"class":57},[51,925,926],{"class":61},"(DIRECTORY ",[51,928,929],{"class":119},"\"${CMAKE_CURRENT_LIST_DIR}\u002Finc\u002F\"\n",[51,931,932,935],{"class":53,"line":72},[51,933,934],{"class":61},"  DESTINATION ",[51,936,937],{"class":57},"${CMAKE_INSTALL_INCLUDEDIR}\n",[51,939,940],{"class":53,"line":79},[51,941,123],{"class":61},[33,943,945],{"id":944},"includecmake_current_list_dircmakeprojectoptionscmake",[21,946,947],{},"include(\"${CMAKE_CURRENT_LIST_DIR}\u002Fcmake\u002FProjectOptions.cmake\")",[42,949,951],{"className":44,"code":950,"language":46,"meta":47,"style":47},"include(\"${CMAKE_CURRENT_LIST_DIR}\u002Fcmake\u002FProjectOptions.cmake\")\n",[21,952,953],{"__ignoreMap":47},[51,954,955,957,959,961],{"class":53,"line":54},[51,956,101],{"class":57},[51,958,62],{"class":61},[51,960,120],{"class":119},[51,962,123],{"class":61},[10,964,965],{},"作用：讀取另一個 CMake 文件。",[329,967,968],{"id":101},[21,969,970],{},"include(...)",[10,972,973,975],{},[21,974,101],{}," 會在當前作用域執行指定的 CMake 腳本。",[10,977,978],{},"可以寫：",[42,980,982],{"className":44,"code":981,"language":46,"meta":47,"style":47},"include(GNUInstallDirs)\ninclude(cmake\u002FProjectOptions.cmake)\ninclude(\"${CMAKE_CURRENT_LIST_DIR}\u002Fcmake\u002FProjectOptions.cmake\")\n",[21,983,984,990,997],{"__ignoreMap":47},[51,985,986,988],{"class":53,"line":54},[51,987,101],{"class":57},[51,989,104],{"class":61},[51,991,992,994],{"class":53,"line":72},[51,993,101],{"class":57},[51,995,996],{"class":61},"(cmake\u002FProjectOptions.cmake)\n",[51,998,999,1001,1003,1005],{"class":53,"line":79},[51,1000,101],{"class":57},[51,1002,62],{"class":61},[51,1004,120],{"class":119},[51,1006,123],{"class":61},[10,1008,1009],{},"區別：",[220,1011,1012,1020],{},[223,1013,1014],{},[226,1015,1016,1018],{},[229,1017,232],{"align":231},[229,1019,235],{"align":231},[237,1021,1022,1031,1041],{},[226,1023,1024,1028],{},[242,1025,1026],{"align":231},[21,1027,691],{},[242,1029,1030],{"align":231},"加載 CMake 內置模塊",[226,1032,1033,1038],{},[242,1034,1035],{"align":231},[21,1036,1037],{},"include(cmake\u002FProjectOptions.cmake)",[242,1039,1040],{"align":231},"相對路徑寫法",[226,1042,1043,1047],{},[242,1044,1045],{"align":231},[21,1046,947],{},[242,1048,1049],{"align":231},"更穩，不受當前工作目錄影響",[329,1051,1053],{"id":1052},"cmake_current_list_dir",[21,1054,1055],{},"CMAKE_CURRENT_LIST_DIR",[10,1057,1058],{},"表示當前正在處理的 CMake 文件所在目錄。",[10,1060,1061,1062,1064],{},"在頂層 ",[21,1063,23],{}," 中，它就是項目根目錄。",[10,1066,1067],{},"所以：",[42,1069,1071],{"className":44,"code":1070,"language":46,"meta":47,"style":47},"\"${CMAKE_CURRENT_LIST_DIR}\u002Fcmake\u002FProjectOptions.cmake\"\n",[21,1072,1073],{"__ignoreMap":47},[51,1074,1075],{"class":53,"line":54},[51,1076,1070],{"class":119},[10,1078,1079],{},"表示：",[42,1081,1084],{"className":1082,"code":1083,"language":427,"meta":47},[425],"项目根目录\u002Fcmake\u002FProjectOptions.cmake\n",[21,1085,1083],{"__ignoreMap":47},[33,1087,1089],{"id":1088},"add_subdirectorysrc",[21,1090,1091],{},"add_subdirectory(src)",[42,1093,1095],{"className":44,"code":1094,"language":46,"meta":47,"style":47},"add_subdirectory(src)\n",[21,1096,1097],{"__ignoreMap":47},[51,1098,1099,1101],{"class":53,"line":54},[51,1100,134],{"class":57},[51,1102,137],{"class":61},[10,1104,1105,1106,1109,1110,1112],{},"作用：進入 ",[21,1107,1108],{},"src"," 子目錄，繼續讀取 ",[21,1111,390],{},"。",[10,1114,178],{},[42,1116,1118],{"className":44,"code":1117,"language":46,"meta":47,"style":47},"add_subdirectory(src)\nadd_subdirectory(test)\nadd_subdirectory(third_party\u002Fsome_lib)\n",[21,1119,1120,1126,1137],{"__ignoreMap":47},[51,1121,1122,1124],{"class":53,"line":54},[51,1123,134],{"class":57},[51,1125,137],{"class":61},[51,1127,1128,1130,1132,1135],{"class":53,"line":72},[51,1129,134],{"class":57},[51,1131,62],{"class":61},[51,1133,1134],{"class":57},"test",[51,1136,123],{"class":61},[51,1138,1139,1141],{"class":53,"line":79},[51,1140,134],{"class":57},[51,1142,1143],{"class":61},"(third_party\u002Fsome_lib)\n",[10,1145,1146],{},"常見寫法：",[42,1148,1150],{"className":44,"code":1149,"language":46,"meta":47,"style":47},"add_subdirectory(\u003C源码目录>)\n",[21,1151,1152],{"__ignoreMap":47},[51,1153,1154,1156],{"class":53,"line":54},[51,1155,134],{"class":57},[51,1157,1158],{"class":61},"(\u003C源码目录>)\n",[10,1160,1161],{},"也可以指定構建目錄：",[42,1163,1165],{"className":44,"code":1164,"language":46,"meta":47,"style":47},"add_subdirectory(src src_build)\n",[21,1166,1167],{"__ignoreMap":47},[51,1168,1169,1171],{"class":53,"line":54},[51,1170,134],{"class":57},[51,1172,1173],{"class":61},"(src src_build)\n",[10,1175,1176],{},"但一般不需要。",[10,1178,1179],{},"頂層只寫：",[42,1181,1182],{"className":44,"code":1094,"language":46,"meta":47,"style":47},[21,1183,1184],{"__ignoreMap":47},[51,1185,1186,1188],{"class":53,"line":54},[51,1187,134],{"class":57},[51,1189,137],{"class":61},[10,1191,1192,1193,1195],{},"表示具體的可執行文件、庫、依賴，都交給 ",[21,1194,1108],{}," 下面的 CMake 文件管理。",[33,1197,1199],{"id":1198},"cmakeprojectoptionscmake",[21,1200,28],{},[10,1202,1203],{},"本模板內容如下：",[42,1205,1207],{"className":44,"code":1206,"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,1208,1209,1217,1229,1241,1245,1252,1263,1274,1278,1289,1294,1308,1321,1326,1338,1349,1355,1361,1367],{"__ignoreMap":47},[51,1210,1211,1214],{"class":53,"line":54},[51,1212,1213],{"class":57},"set",[51,1215,1216],{"class":61},"(CMAKE_CXX_STANDARD 17)\n",[51,1218,1219,1221,1224,1227],{"class":53,"line":72},[51,1220,1213],{"class":57},[51,1222,1223],{"class":61},"(CMAKE_CXX_STANDARD_REQUIRED ",[51,1225,1226],{"class":57},"ON",[51,1228,123],{"class":61},[51,1230,1231,1233,1236,1239],{"class":53,"line":79},[51,1232,1213],{"class":57},[51,1234,1235],{"class":61},"(CMAKE_CXX_EXTENSIONS ",[51,1237,1238],{"class":57},"OFF",[51,1240,123],{"class":61},[51,1242,1243],{"class":53,"line":93},[51,1244,76],{"emptyLinePlaceholder":75},[51,1246,1247,1249],{"class":53,"line":98},[51,1248,1213],{"class":57},[51,1250,1251],{"class":61},"(CMAKE_C_STANDARD 11)\n",[51,1253,1254,1256,1259,1261],{"class":53,"line":107},[51,1255,1213],{"class":57},[51,1257,1258],{"class":61},"(CMAKE_C_STANDARD_REQUIRED ",[51,1260,1226],{"class":57},[51,1262,123],{"class":61},[51,1264,1265,1267,1270,1272],{"class":53,"line":112},[51,1266,1213],{"class":57},[51,1268,1269],{"class":61},"(CMAKE_C_EXTENSIONS ",[51,1271,1238],{"class":57},[51,1273,123],{"class":61},[51,1275,1276],{"class":53,"line":126},[51,1277,76],{"emptyLinePlaceholder":75},[51,1279,1280,1282,1285,1287],{"class":53,"line":131},[51,1281,1213],{"class":57},[51,1283,1284],{"class":61},"(CMAKE_EXPORT_COMPILE_COMMANDS ",[51,1286,1226],{"class":57},[51,1288,123],{"class":61},[51,1290,1292],{"class":53,"line":1291},10,[51,1293,76],{"emptyLinePlaceholder":75},[51,1295,1297,1300,1303,1306],{"class":53,"line":1296},11,[51,1298,1299],{"class":57},"add_library",[51,1301,1302],{"class":61},"(project_options ",[51,1304,1305],{"class":65},"INTERFACE",[51,1307,123],{"class":61},[51,1309,1311,1314,1316,1318],{"class":53,"line":1310},12,[51,1312,1313],{"class":57},"target_compile_features",[51,1315,1302],{"class":61},[51,1317,1305],{"class":65},[51,1319,1320],{"class":61}," cxx_std_17)\n",[51,1322,1324],{"class":53,"line":1323},13,[51,1325,76],{"emptyLinePlaceholder":75},[51,1327,1329,1331,1334,1336],{"class":53,"line":1328},14,[51,1330,1299],{"class":57},[51,1332,1333],{"class":61},"(project_warnings ",[51,1335,1305],{"class":65},[51,1337,123],{"class":61},[51,1339,1341,1344,1346],{"class":53,"line":1340},15,[51,1342,1343],{"class":57},"target_compile_options",[51,1345,1333],{"class":61},[51,1347,1348],{"class":65},"INTERFACE\n",[51,1350,1352],{"class":53,"line":1351},16,[51,1353,1354],{"class":61},"  -Wall\n",[51,1356,1358],{"class":53,"line":1357},17,[51,1359,1360],{"class":61},"  -Wextra\n",[51,1362,1364],{"class":53,"line":1363},18,[51,1365,1366],{"class":61},"  -Wpedantic\n",[51,1368,1370],{"class":53,"line":1369},19,[51,1371,123],{"class":61},[10,1373,1374],{},"這個文件只放項目公共選項，不放 Eigen、OpenCV 等第三方依賴。",[33,1376,1378],{"id":1377},"cmake_cxx_standard",[21,1379,1380],{},"CMAKE_CXX_STANDARD",[42,1382,1384],{"className":44,"code":1383,"language":46,"meta":47,"style":47},"set(CMAKE_CXX_STANDARD 17)\n",[21,1385,1386],{"__ignoreMap":47},[51,1387,1388,1390],{"class":53,"line":54},[51,1389,1213],{"class":57},[51,1391,1216],{"class":61},[10,1393,1394],{},"設置默認 C++ 標準。",[10,1396,591],{},[220,1398,1399,1408],{},[223,1400,1401],{},[226,1402,1403,1405],{},[229,1404,358],{"align":231},[229,1406,1407],{"align":231},"標準",[237,1409,1410,1420,1430,1440,1450],{},[226,1411,1412,1417],{},[242,1413,1414],{"align":231},[21,1415,1416],{},"11",[242,1418,1419],{"align":231},"C++11",[226,1421,1422,1427],{},[242,1423,1424],{"align":231},[21,1425,1426],{},"14",[242,1428,1429],{"align":231},"C++14",[226,1431,1432,1437],{},[242,1433,1434],{"align":231},[21,1435,1436],{},"17",[242,1438,1439],{"align":231},"C++17",[226,1441,1442,1447],{},[242,1443,1444],{"align":231},[21,1445,1446],{},"20",[242,1448,1449],{"align":231},"C++20",[226,1451,1452,1457],{},[242,1453,1454],{"align":231},[21,1455,1456],{},"23",[242,1458,1459],{"align":231},"C++23",[10,1461,1462],{},"本模板使用 C++17：",[42,1464,1465],{"className":44,"code":1383,"language":46,"meta":47,"style":47},[21,1466,1467],{"__ignoreMap":47},[51,1468,1469,1471],{"class":53,"line":54},[51,1470,1213],{"class":57},[51,1472,1216],{"class":61},[10,1474,1475],{},"如果想用 C++20：",[42,1477,1479],{"className":44,"code":1478,"language":46,"meta":47,"style":47},"set(CMAKE_CXX_STANDARD 20)\ntarget_compile_features(project_options INTERFACE cxx_std_20)\n",[21,1480,1481,1488],{"__ignoreMap":47},[51,1482,1483,1485],{"class":53,"line":54},[51,1484,1213],{"class":57},[51,1486,1487],{"class":61},"(CMAKE_CXX_STANDARD 20)\n",[51,1489,1490,1492,1494,1496],{"class":53,"line":72},[51,1491,1313],{"class":57},[51,1493,1302],{"class":61},[51,1495,1305],{"class":65},[51,1497,1498],{"class":61}," cxx_std_20)\n",[10,1500,1501],{},"注意兩個地方最好一起改。",[33,1503,1505],{"id":1504},"cmake_cxx_standard_required",[21,1506,1507],{},"CMAKE_CXX_STANDARD_REQUIRED",[42,1509,1511],{"className":44,"code":1510,"language":46,"meta":47,"style":47},"set(CMAKE_CXX_STANDARD_REQUIRED ON)\n",[21,1512,1513],{"__ignoreMap":47},[51,1514,1515,1517,1519,1521],{"class":53,"line":54},[51,1516,1213],{"class":57},[51,1518,1223],{"class":61},[51,1520,1226],{"class":57},[51,1522,123],{"class":61},[10,1524,1525],{},"作用：要求編譯器必須支持指定的 C++ 標準。",[10,1527,178],{},[220,1529,1530,1538],{},[223,1531,1532],{},[226,1533,1534,1536],{},[229,1535,358],{"align":231},[229,1537,235],{"align":231},[237,1539,1540,1549],{},[226,1541,1542,1546],{},[242,1543,1544],{"align":231},[21,1545,1226],{},[242,1547,1548],{"align":231},"必須使用指定標準，不支持就報錯",[226,1550,1551,1555],{},[242,1552,1553],{"align":231},[21,1554,1238],{},[242,1556,1557],{"align":231},"不支持時可能退回較低標準",[10,1559,1560,1561,1563],{},"模板建議寫 ",[21,1562,1226],{},"。否則你以爲在用 C++17，實際編譯器可能退回舊標準，錯誤會更隱蔽。",[33,1565,1567],{"id":1566},"cmake_cxx_extensions",[21,1568,1569],{},"CMAKE_CXX_EXTENSIONS",[42,1571,1573],{"className":44,"code":1572,"language":46,"meta":47,"style":47},"set(CMAKE_CXX_EXTENSIONS OFF)\n",[21,1574,1575],{"__ignoreMap":47},[51,1576,1577,1579,1581,1583],{"class":53,"line":54},[51,1578,1213],{"class":57},[51,1580,1235],{"class":61},[51,1582,1238],{"class":57},[51,1584,123],{"class":61},[10,1586,1587],{},"作用：控制是否使用編譯器擴展標準。",[10,1589,178],{},[220,1591,1592,1603],{},[223,1593,1594],{},[226,1595,1596,1598,1601],{},[229,1597,358],{"align":231},[229,1599,1600],{"align":231},"編譯選項傾向",[229,1602,235],{"align":231},[237,1604,1605,1619],{},[226,1606,1607,1611,1616],{},[242,1608,1609],{"align":231},[21,1610,1226],{},[242,1612,1613],{"align":231},[21,1614,1615],{},"gnu++17",[242,1617,1618],{"align":231},"允許 GNU 擴展",[226,1620,1621,1625,1630],{},[242,1622,1623],{"align":231},[21,1624,1238],{},[242,1626,1627],{"align":231},[21,1628,1629],{},"c++17",[242,1631,1632],{"align":231},"更標準、更可移植",[10,1634,1635,1636,1638],{},"Linux-only 項目也建議先寫 ",[21,1637,1238],{},"，這樣代碼更接近標準 C++。",[33,1640,1642],{"id":1641},"c-標準相關選項","C 標準相關選項",[42,1644,1646],{"className":44,"code":1645,"language":46,"meta":47,"style":47},"set(CMAKE_C_STANDARD 11)\nset(CMAKE_C_STANDARD_REQUIRED ON)\nset(CMAKE_C_EXTENSIONS OFF)\n",[21,1647,1648,1654,1664],{"__ignoreMap":47},[51,1649,1650,1652],{"class":53,"line":54},[51,1651,1213],{"class":57},[51,1653,1251],{"class":61},[51,1655,1656,1658,1660,1662],{"class":53,"line":72},[51,1657,1213],{"class":57},[51,1659,1258],{"class":61},[51,1661,1226],{"class":57},[51,1663,123],{"class":61},[51,1665,1666,1668,1670,1672],{"class":53,"line":79},[51,1667,1213],{"class":57},[51,1669,1269],{"class":61},[51,1671,1238],{"class":57},[51,1673,123],{"class":61},[10,1675,1676],{},"含義和 C++ 對應選項類似。",[10,1678,1679],{},"常見 C 標準：",[220,1681,1682,1690],{},[223,1683,1684],{},[226,1685,1686,1688],{},[229,1687,358],{"align":231},[229,1689,1407],{"align":231},[237,1691,1692,1702,1711,1720],{},[226,1693,1694,1699],{},[242,1695,1696],{"align":231},[21,1697,1698],{},"99",[242,1700,1701],{"align":231},"C99",[226,1703,1704,1708],{},[242,1705,1706],{"align":231},[21,1707,1416],{},[242,1709,1710],{"align":231},"C11",[226,1712,1713,1717],{},[242,1714,1715],{"align":231},[21,1716,1436],{},[242,1718,1719],{"align":231},"C17",[226,1721,1722,1726],{},[242,1723,1724],{"align":231},[21,1725,1456],{},[242,1727,1728],{"align":231},"C23",[10,1730,1731,1732,1735],{},"如果項目沒有 ",[21,1733,1734],{},".c"," 文件，也可以只啓用 C++：",[42,1737,1738],{"className":44,"code":657,"language":46,"meta":47,"style":47},[21,1739,1740],{"__ignoreMap":47},[51,1741,1742,1744,1746,1748],{"class":53,"line":54},[51,1743,82],{"class":57},[51,1745,85],{"class":61},[51,1747,66],{"class":65},[51,1749,670],{"class":61},[10,1751,1752],{},"然後刪除 C 標準相關設置。",[33,1754,1756],{"id":1755},"cmake_export_compile_commands",[21,1757,1758],{},"CMAKE_EXPORT_COMPILE_COMMANDS",[42,1760,1762],{"className":44,"code":1761,"language":46,"meta":47,"style":47},"set(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n",[21,1763,1764],{"__ignoreMap":47},[51,1765,1766,1768,1770,1772],{"class":53,"line":54},[51,1767,1213],{"class":57},[51,1769,1284],{"class":61},[51,1771,1226],{"class":57},[51,1773,123],{"class":61},[10,1775,1776,1777,1112],{},"作用：生成 ",[21,1778,1779],{},"compile_commands.json",[10,1781,1782],{},"可以填：",[220,1784,1785,1793],{},[223,1786,1787],{},[226,1788,1789,1791],{},[229,1790,358],{"align":231},[229,1792,235],{"align":231},[237,1794,1795,1804],{},[226,1796,1797,1801],{},[242,1798,1799],{"align":231},[21,1800,1226],{},[242,1802,1803],{"align":231},"生成",[226,1805,1806,1810],{},[242,1807,1808],{"align":231},[21,1809,1238],{},[242,1811,1812],{"align":231},"不生成",[10,1814,1815,1816,1819],{},"這個選項在 ",[21,1817,1818],{},"CMakePresets.json"," 中也寫了：",[42,1821,1825],{"className":1822,"code":1823,"language":1824,"meta":47,"style":47},"language-json shiki shiki-themes github-light github-dark","\"CMAKE_EXPORT_COMPILE_COMMANDS\": \"ON\"\n","json",[21,1826,1827],{"__ignoreMap":47},[51,1828,1829,1832,1835],{"class":53,"line":54},[51,1830,1831],{"class":119},"\"CMAKE_EXPORT_COMPILE_COMMANDS\"",[51,1833,1834],{"class":61},": ",[51,1836,1837],{"class":119},"\"ON\"\n",[10,1839,1840,1841,1844],{},"兩個地方都寫不衝突。preset 的好處是 IDE 和命令行都能明確看到這個配置；",[21,1842,1843],{},"ProjectOptions.cmake"," 的好處是即使不用 preset，也默認開啓。",[33,1846,1848],{"id":1847},"add_libraryproject_options-interface",[21,1849,1850],{},"add_library(project_options INTERFACE)",[42,1852,1854],{"className":44,"code":1853,"language":46,"meta":47,"style":47},"add_library(project_options INTERFACE)\n",[21,1855,1856],{"__ignoreMap":47},[51,1857,1858,1860,1862,1864],{"class":53,"line":54},[51,1859,1299],{"class":57},[51,1861,1302],{"class":61},[51,1863,1305],{"class":65},[51,1865,123],{"class":61},[10,1867,1868],{},"創建一個 interface target。",[10,1870,1871,1873,1874,752,1877,1880],{},[21,1872,1305],{}," target 沒有源碼，不會生成 ",[21,1875,1876],{},".a",[21,1878,1879],{},".so","。它只用來攜帶編譯特性、宏定義、include 路徑、鏈接依賴等\"使用要求\"。",[10,1882,1883,1885],{},[21,1884,1299],{}," 常見類型：",[220,1887,1888,1903],{},[223,1889,1890],{},[226,1891,1892,1895,1898,1901],{},[229,1893,1894],{"align":231},"類型",[229,1896,1897],{"align":231},"是否有源碼",[229,1899,1900],{"align":231},"是否生成產物",[229,1902,722],{"align":231},[237,1904,1905,1922,1938,1952,1970],{},[226,1906,1907,1912,1915,1919],{},[242,1908,1909],{"align":231},[21,1910,1911],{},"STATIC",[242,1913,1914],{"align":231},"有",[242,1916,1917],{"align":231},[21,1918,1876],{},[242,1920,1921],{"align":231},"靜態庫",[226,1923,1924,1929,1931,1935],{},[242,1925,1926],{"align":231},[21,1927,1928],{},"SHARED",[242,1930,1914],{"align":231},[242,1932,1933],{"align":231},[21,1934,1879],{},[242,1936,1937],{"align":231},"動態庫",[226,1939,1940,1945,1947,1950],{},[242,1941,1942],{"align":231},[21,1943,1944],{},"MODULE",[242,1946,1914],{"align":231},[242,1948,1949],{"align":231},"插件式動態模塊",[242,1951],{"align":231},[226,1953,1954,1959,1961,1967],{},[242,1955,1956],{"align":231},[21,1957,1958],{},"OBJECT",[242,1960,1914],{"align":231},[242,1962,1963,1966],{"align":231},[21,1964,1965],{},".o"," 集合",[242,1968,1969],{"align":231},"複用對象文件",[226,1971,1972,1976,1979,1981],{},[242,1973,1974],{"align":231},[21,1975,1305],{},[242,1977,1978],{"align":231},"無",[242,1980,1978],{"align":231},[242,1982,1983],{"align":231},"傳遞配置",[10,1985,1986],{},"本模板用：",[42,1988,1990],{"className":44,"code":1989,"language":46,"meta":47,"style":47},"project_options\n",[21,1991,1992],{"__ignoreMap":47},[51,1993,1994],{"class":53,"line":54},[51,1995,1989],{"class":61},[10,1997,1998],{},"保存 C++ 標準要求。",[33,2000,2001],{"id":1313},[21,2002,1313],{},[42,2004,2006],{"className":44,"code":2005,"language":46,"meta":47,"style":47},"target_compile_features(project_options INTERFACE cxx_std_17)\n",[21,2007,2008],{"__ignoreMap":47},[51,2009,2010,2012,2014,2016],{"class":53,"line":54},[51,2011,1313],{"class":57},[51,2013,1302],{"class":61},[51,2015,1305],{"class":65},[51,2017,1320],{"class":61},[10,2019,2020],{},"作用：聲明使用這個 target 的目標需要 C++17。",[10,2022,178],{},[220,2024,2025,2033],{},[223,2026,2027],{},[226,2028,2029,2031],{},[229,2030,232],{"align":231},[229,2032,235],{"align":231},[237,2034,2035,2045,2055,2065,2075],{},[226,2036,2037,2042],{},[242,2038,2039],{"align":231},[21,2040,2041],{},"cxx_std_11",[242,2043,2044],{"align":231},"至少 C++11",[226,2046,2047,2052],{},[242,2048,2049],{"align":231},[21,2050,2051],{},"cxx_std_14",[242,2053,2054],{"align":231},"至少 C++14",[226,2056,2057,2062],{},[242,2058,2059],{"align":231},[21,2060,2061],{},"cxx_std_17",[242,2063,2064],{"align":231},"至少 C++17",[226,2066,2067,2072],{},[242,2068,2069],{"align":231},[21,2070,2071],{},"cxx_std_20",[242,2073,2074],{"align":231},"至少 C++20",[226,2076,2077,2082],{},[242,2078,2079],{"align":231},[21,2080,2081],{},"cxx_std_23",[242,2083,2084],{"align":231},"至少 C++23",[10,2086,2087],{},"爲什麼這裏又寫了一遍 C++17？",[42,2089,2090],{"className":44,"code":1383,"language":46,"meta":47,"style":47},[21,2091,2092],{"__ignoreMap":47},[51,2093,2094,2096],{"class":53,"line":54},[51,2095,1213],{"class":57},[51,2097,1216],{"class":61},[10,2099,2100],{},"是全局默認值。",[42,2102,2103],{"className":44,"code":2005,"language":46,"meta":47,"style":47},[21,2104,2105],{"__ignoreMap":47},[51,2106,2107,2109,2111,2113],{"class":53,"line":54},[51,2108,1313],{"class":57},[51,2110,1302],{"class":61},[51,2112,1305],{"class":65},[51,2114,1320],{"class":61},[10,2116,2117],{},"是目標級要求。現代 CMake 更推薦用目標級要求，因爲它能隨着 target 鏈接關係傳播。",[33,2119,2121],{"id":2120},"add_libraryproject_warnings-interface",[21,2122,2123],{},"add_library(project_warnings INTERFACE)",[42,2125,2127],{"className":44,"code":2126,"language":46,"meta":47,"style":47},"add_library(project_warnings INTERFACE)\n",[21,2128,2129],{"__ignoreMap":47},[51,2130,2131,2133,2135,2137],{"class":53,"line":54},[51,2132,1299],{"class":57},[51,2134,1333],{"class":61},[51,2136,1305],{"class":65},[51,2138,123],{"class":61},[10,2140,2141],{},"創建一個專門保存 warning 選項的 interface target。",[10,2143,2144],{},"這樣每個 target 可以選擇是否鏈接：",[42,2146,2148],{"className":44,"code":2147,"language":46,"meta":47,"style":47},"target_link_libraries(my_target\n  PRIVATE\n    project_warnings\n)\n",[21,2149,2150,2158,2163,2168],{"__ignoreMap":47},[51,2151,2152,2155],{"class":53,"line":54},[51,2153,2154],{"class":57},"target_link_libraries",[51,2156,2157],{"class":61},"(my_target\n",[51,2159,2160],{"class":53,"line":72},[51,2161,2162],{"class":65},"  PRIVATE\n",[51,2164,2165],{"class":53,"line":79},[51,2166,2167],{"class":61},"    project_warnings\n",[51,2169,2170],{"class":53,"line":93},[51,2171,123],{"class":61},[33,2173,2174],{"id":1343},[21,2175,1343],{},[42,2177,2179],{"className":44,"code":2178,"language":46,"meta":47,"style":47},"target_compile_options(project_warnings INTERFACE\n  -Wall\n  -Wextra\n  -Wpedantic\n)\n",[21,2180,2181,2189,2193,2197,2201],{"__ignoreMap":47},[51,2182,2183,2185,2187],{"class":53,"line":54},[51,2184,1343],{"class":57},[51,2186,1333],{"class":61},[51,2188,1348],{"class":65},[51,2190,2191],{"class":53,"line":72},[51,2192,1354],{"class":61},[51,2194,2195],{"class":53,"line":79},[51,2196,1360],{"class":61},[51,2198,2199],{"class":53,"line":93},[51,2200,1366],{"class":61},[51,2202,2203],{"class":53,"line":98},[51,2204,123],{"class":61},[10,2206,2207],{},"作用：給目標添加編譯選項。",[10,2209,2210],{},"本模板選項：",[220,2212,2213,2223],{},[223,2214,2215],{},[226,2216,2217,2220],{},[229,2218,2219],{"align":231},"選項",[229,2221,2222],{"align":231},"作用",[237,2224,2225,2235,2245],{},[226,2226,2227,2232],{},[242,2228,2229],{"align":231},[21,2230,2231],{},"-Wall",[242,2233,2234],{"align":231},"開啓一組常見警告",[226,2236,2237,2242],{},[242,2238,2239],{"align":231},[21,2240,2241],{},"-Wextra",[242,2243,2244],{"align":231},"開啓更多警告",[226,2246,2247,2252],{},[242,2248,2249],{"align":231},[21,2250,2251],{},"-Wpedantic",[242,2253,2254],{"align":231},"提醒不符合標準的寫法",[10,2256,2257],{},"常見可追加選項：",[220,2259,2260,2268],{},[223,2261,2262],{},[226,2263,2264,2266],{},[229,2265,2219],{"align":231},[229,2267,235],{"align":231},[237,2269,2270,2280,2290],{},[226,2271,2272,2277],{},[242,2273,2274],{"align":231},[21,2275,2276],{},"-Wconversion",[242,2278,2279],{"align":231},"類型轉換可能丟失信息時警告",[226,2281,2282,2287],{},[242,2283,2284],{"align":231},[21,2285,2286],{},"-Wshadow",[242,2288,2289],{"align":231},"變量名遮蔽時警告",[226,2291,2292,2297],{},[242,2293,2294],{"align":231},[21,2295,2296],{},"-Werror",[242,2298,2299],{"align":231},"把 warning 當 error",[10,2301,2302,2303,2305],{},"不建議模板默認加 ",[21,2304,2296],{},"。因爲不同編譯器、不同第三方頭文件可能產生不同 warning，初學階段容易被卡住。",[33,2307,2309,2312,2313,2312,2316,2318],{"id":2308},"publicprivateinterface-的直覺",[21,2310,2311],{},"PUBLIC","、",[21,2314,2315],{},"PRIVATE",[21,2317,1305],{}," 的直覺",[10,2320,2321],{},"後面的 CMake 文件會大量出現：",[42,2323,2325],{"className":44,"code":2324,"language":46,"meta":47,"style":47},"PUBLIC\nPRIVATE\nINTERFACE\n",[21,2326,2327,2332,2337],{"__ignoreMap":47},[51,2328,2329],{"class":53,"line":54},[51,2330,2331],{"class":65},"PUBLIC\n",[51,2333,2334],{"class":53,"line":72},[51,2335,2336],{"class":65},"PRIVATE\n",[51,2338,2339],{"class":53,"line":79},[51,2340,1348],{"class":65},[10,2342,2343],{},"它們控制\"屬性是否傳遞給使用者\"。",[220,2345,2346,2360],{},[223,2347,2348],{},[226,2349,2350,2353,2357],{},[229,2351,2352],{"align":231},"關鍵字",[229,2354,2356],{"align":2355},"center","自己用",[229,2358,2359],{"align":2355},"傳給別人",[237,2361,2362,2374,2384],{},[226,2363,2364,2368,2371],{},[242,2365,2366],{"align":231},[21,2367,2315],{},[242,2369,2370],{"align":2355},"是",[242,2372,2373],{"align":2355},"否",[226,2375,2376,2380,2382],{},[242,2377,2378],{"align":231},[21,2379,2311],{},[242,2381,2370],{"align":2355},[242,2383,2370],{"align":2355},[226,2385,2386,2390,2392],{},[242,2387,2388],{"align":231},[21,2389,1305],{},[242,2391,2373],{"align":2355},[242,2393,2370],{"align":2355},[10,2395,2396],{},"例如：",[42,2398,2400],{"className":44,"code":2399,"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,2401,2402,2409,2414,2419,2423,2427],{"__ignoreMap":47},[51,2403,2404,2406],{"class":53,"line":54},[51,2405,2154],{"class":57},[51,2407,2408],{"class":61},"(lib1_src_lib\n",[51,2410,2411],{"class":53,"line":72},[51,2412,2413],{"class":65},"  PUBLIC\n",[51,2415,2416],{"class":53,"line":79},[51,2417,2418],{"class":61},"    project_options\n",[51,2420,2421],{"class":53,"line":93},[51,2422,2162],{"class":65},[51,2424,2425],{"class":53,"line":98},[51,2426,2167],{"class":61},[51,2428,2429],{"class":53,"line":107},[51,2430,123],{"class":61},[10,2432,2433],{},"含義：",[14,2435,2436,2445,2453],{},[17,2437,2438,2441,2442,1112],{},[21,2439,2440],{},"lib1_src_lib"," 自己需要 ",[21,2443,2444],{},"project_options",[17,2446,2447,2448,2450,2451,1112],{},"鏈接 ",[21,2449,2440],{}," 的目標也會得到 ",[21,2452,2444],{},[17,2454,2455,2458,2459,2461],{},[21,2456,2457],{},"project_warnings"," 只用於編譯 ",[21,2460,2440],{}," 自己，不強迫下游也開啓相同 warning。",[2463,2464,2465],"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":2467},[2468,2470,2471,2476,2477,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492],{"id":35,"depth":72,"text":2469},"頂層 CMakeLists.txt",{"id":58,"depth":72,"text":58},{"id":82,"depth":72,"text":82,"children":2472},[2473,2474,2475],{"id":331,"depth":79,"text":331},{"id":460,"depth":79,"text":66},{"id":573,"depth":79,"text":576},{"id":688,"depth":72,"text":691},{"id":944,"depth":72,"text":947,"children":2478},[2479,2480],{"id":101,"depth":79,"text":970},{"id":1052,"depth":79,"text":1055},{"id":1088,"depth":72,"text":1091},{"id":1198,"depth":72,"text":28},{"id":1377,"depth":72,"text":1380},{"id":1504,"depth":72,"text":1507},{"id":1566,"depth":72,"text":1569},{"id":1641,"depth":72,"text":1642},{"id":1755,"depth":72,"text":1758},{"id":1847,"depth":72,"text":1850},{"id":1313,"depth":72,"text":1313},{"id":2120,"depth":72,"text":2123},{"id":1343,"depth":72,"text":1343},{"id":2308,"depth":72,"text":2493},"PUBLIC、PRIVATE、INTERFACE 的直覺","\u002Fzh-hant\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","zh-hant:2023-10-05-cplusplus-jiao-xue","\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项",false,null,"zh-Hant","zh-hant",{},{"title":5,"description":12},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","UtkU6tZ2wMlUL0_aDEu2pKOhotPCJDzPjDtUtplGMlM",[2513,2519,2524,2529,2534,2539,2544,2549,2554,2559,2564,2569,2574,2579,2584,2589,2594,2599,2604,2609,2614,2619,2624,2629,2634,2639,2644,2649,2654,2659,2664,2669,2674,2679,2684,2689,2694,2699,2704,2709,2714,2719,2724,2729,2734,2739,2744,2749,2754,2759,2764,2769,2774,2779,2784,2789,2794,2799,2804,2809,2814,2819,2824,2829,2834,2839,2844,2849,2854,2859,2864,2869,2874,2879,2884,2889,2894,2895,2900,2905,2910,2915],{"path":2514,"stem":2515,"title":2516,"date":2496,"chapterOrder":2517,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++開發環境搭建與測試","0100",0,{"path":2520,"stem":2521,"title":2522,"date":2496,"chapterOrder":2523,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基礎初識","0200",{"path":2525,"stem":2526,"title":2527,"date":2496,"chapterOrder":2528,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","數據類型與數據存放","0300",{"path":2530,"stem":2531,"title":2532,"date":2496,"chapterOrder":2533,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","輸入輸出","0400",{"path":2535,"stem":2536,"title":2537,"date":2496,"chapterOrder":2538,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","運算符","0500",{"path":2540,"stem":2541,"title":2542,"date":2496,"chapterOrder":2543,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程結構","0600",{"path":2545,"stem":2546,"title":2547,"date":2496,"chapterOrder":2548,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","數組","0700",{"path":2550,"stem":2551,"title":2552,"date":2496,"chapterOrder":2553,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函數與頭文件","0800",{"path":2555,"stem":2556,"title":2557,"date":2496,"chapterOrder":2558,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指針","0900",{"path":2560,"stem":2561,"title":2562,"date":2496,"chapterOrder":2563,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","結構體與共用體","1000",{"path":2565,"stem":2566,"title":2567,"date":2496,"chapterOrder":2568,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","內存分區與生命週期","1100",{"path":2570,"stem":2571,"title":2572,"date":2496,"chapterOrder":2573,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":2575,"stem":2576,"title":2577,"date":2496,"chapterOrder":2578,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","函數提高與命名空間","1300",{"path":2580,"stem":2581,"title":2582,"date":2496,"chapterOrder":2583,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封裝","1400-0100",{"path":2585,"stem":2586,"title":2587,"date":2496,"chapterOrder":2588,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","對象初始化和清理","1400-0200",{"path":2590,"stem":2591,"title":2592,"date":2496,"chapterOrder":2593,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","對象模型與this指針","1400-0300",{"path":2595,"stem":2596,"title":2597,"date":2496,"chapterOrder":2598,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元與運算符重載","1400-0400",{"path":2600,"stem":2601,"title":2602,"date":2496,"chapterOrder":2603,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","繼承","1400-0500",{"path":2605,"stem":2606,"title":2607,"date":2496,"chapterOrder":2608,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多態","1400-0600",{"path":2610,"stem":2611,"title":2612,"date":2496,"chapterOrder":2613,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","類和對象","1400",{"path":2615,"stem":2616,"title":2617,"date":2496,"chapterOrder":2618,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":2620,"stem":2621,"title":2622,"date":2496,"chapterOrder":2623,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","異常處理","1600",{"path":2625,"stem":2626,"title":2627,"date":2496,"chapterOrder":2628,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":2630,"stem":2631,"title":2632,"date":2496,"chapterOrder":2633,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初識","1800-0100",{"path":2635,"stem":2636,"title":2637,"date":2496,"chapterOrder":2638,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":2640,"stem":2641,"title":2642,"date":2496,"chapterOrder":2643,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":2645,"stem":2646,"title":2647,"date":2496,"chapterOrder":2648,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":2650,"stem":2651,"title":2652,"date":2496,"chapterOrder":2653,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":2655,"stem":2656,"title":2657,"date":2496,"chapterOrder":2658,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":2660,"stem":2661,"title":2662,"date":2496,"chapterOrder":2663,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器","1800-0700",{"path":2665,"stem":2666,"title":2667,"date":2496,"chapterOrder":2668,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":2670,"stem":2671,"title":2672,"date":2496,"chapterOrder":2673,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":2675,"stem":2676,"title":2677,"date":2496,"chapterOrder":2678,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":2680,"stem":2681,"title":2682,"date":2496,"chapterOrder":2683,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函數對象與謂詞","1800-1100",{"path":2685,"stem":2686,"title":2687,"date":2496,"chapterOrder":2688,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法","1800-1200",{"path":2690,"stem":2691,"title":2692,"date":2496,"chapterOrder":2693,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高編程","1800",{"path":2695,"stem":2696,"title":2697,"date":2496,"chapterOrder":2698,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++類型轉換","1900",{"path":2700,"stem":2701,"title":2702,"date":2496,"chapterOrder":2703,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto","2000-0100",{"path":2705,"stem":2706,"title":2707,"date":2496,"chapterOrder":2708,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":2710,"stem":2711,"title":2712,"date":2496,"chapterOrder":2713,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":2715,"stem":2716,"title":2717,"date":2496,"chapterOrder":2718,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":2720,"stem":2721,"title":2722,"date":2496,"chapterOrder":2723,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","範圍 for 循環","2000-0500",{"path":2725,"stem":2726,"title":2727,"date":2496,"chapterOrder":2728,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","結構化綁定","2000-0600",{"path":2730,"stem":2731,"title":2732,"date":2496,"chapterOrder":2733,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":2735,"stem":2736,"title":2737,"date":2496,"chapterOrder":2738,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":2740,"stem":2741,"title":2742,"date":2496,"chapterOrder":2743,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指針","2000-0900",{"path":2745,"stem":2746,"title":2747,"date":2496,"chapterOrder":2748,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移動語義","2000-1000",{"path":2750,"stem":2751,"title":2752,"date":2496,"chapterOrder":2753,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表達式","2000-1100",{"path":2755,"stem":2756,"title":2757,"date":2496,"chapterOrder":2758,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":2760,"stem":2761,"title":2762,"date":2496,"chapterOrder":2763,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":2765,"stem":2766,"title":2767,"date":2496,"chapterOrder":2768,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":2770,"stem":2771,"title":2772,"date":2496,"chapterOrder":2773,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":2775,"stem":2776,"title":2777,"date":2496,"chapterOrder":2778,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":2780,"stem":2781,"title":2782,"date":2496,"chapterOrder":2783,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":2785,"stem":2786,"title":2787,"date":2496,"chapterOrder":2788,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":2790,"stem":2791,"title":2792,"date":2496,"chapterOrder":2793,"chapterDepth":72,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 與 join","2000-1900-0100",{"path":2795,"stem":2796,"title":2797,"date":2496,"chapterOrder":2798,"chapterDepth":72,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 與 lock_guard","2000-1900-0200",{"path":2800,"stem":2801,"title":2802,"date":2496,"chapterOrder":2803,"chapterDepth":72,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":2805,"stem":2806,"title":2807,"date":2496,"chapterOrder":2808,"chapterDepth":72,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":2810,"stem":2811,"title":2812,"date":2496,"chapterOrder":2813,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","併發編程","2000-1900",{"path":2815,"stem":2816,"title":2817,"date":2496,"chapterOrder":2818,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":2820,"stem":2821,"title":2822,"date":2496,"chapterOrder":2823,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 簡介","2000-2100",{"path":2825,"stem":2826,"title":2827,"date":2496,"chapterOrder":2828,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","現代C++","2000",{"path":2830,"stem":2831,"title":2832,"date":2496,"chapterOrder":2833,"chapterDepth":72,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定時器與異步 IO","2100-0100-0100",{"path":2835,"stem":2836,"title":2837,"date":2496,"chapterOrder":2838,"chapterDepth":72,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基礎","2100-0100-0200",{"path":2840,"stem":2841,"title":2842,"date":2496,"chapterOrder":2843,"chapterDepth":72,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":2845,"stem":2846,"title":2847,"date":2496,"chapterOrder":2848,"chapterDepth":72,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":2850,"stem":2851,"title":2852,"date":2496,"chapterOrder":2853,"chapterDepth":72,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":2855,"stem":2856,"title":2857,"date":2496,"chapterOrder":2858,"chapterDepth":72,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","機器人工程寫法與 ROS2 集成","2100-0100-0600",{"path":2860,"stem":2861,"title":2862,"date":2496,"chapterOrder":2863,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio異步IO庫","2100-0100",{"path":2865,"stem":2866,"title":2867,"date":2496,"chapterOrder":2868,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen線性代數庫","2100-0200",{"path":2870,"stem":2871,"title":2872,"date":2496,"chapterOrder":2873,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV計算機視覺庫","2100-0300",{"path":2875,"stem":2876,"title":2877,"date":2496,"chapterOrder":2878,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL點雲庫","2100-0400",{"path":2880,"stem":2881,"title":2882,"date":2496,"chapterOrder":2883,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李羣李代數庫","2100-0500",{"path":2885,"stem":2886,"title":2887,"date":2496,"chapterOrder":2888,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用庫學習","2100",{"path":2890,"stem":2891,"title":2892,"date":2496,"chapterOrder":2893,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets與構建安裝","2200-0100",{"path":2494,"stem":2510,"title":5,"date":2496,"chapterOrder":2495,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},{"path":2896,"stem":2897,"title":2898,"date":2496,"chapterOrder":2899,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src與lib模塊CMake詳解","2200-0300",{"path":2901,"stem":2902,"title":2903,"date":2496,"chapterOrder":2904,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方庫依賴寫法","2200-0400",{"path":2906,"stem":2907,"title":2908,"date":2496,"chapterOrder":2909,"chapterDepth":54,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板擴展與常見問題","2200-0500",{"path":2911,"stem":2912,"title":2913,"date":2496,"chapterOrder":2914,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":2503},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":2499,"stem":2916,"title":2917,"date":2496,"chapterOrder":2504,"chapterDepth":2518,"docKey":2498,"docRoot":2499,"docTitle":2500,"isWikiDoc":75,"isWikiIndex":75},"_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",{"variants":2919},[2920,2923,2924,2927,2930],{"path":2921,"localeSlug":2922,"i18nKey":2502},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","en-us",{"path":2494,"localeSlug":2506,"i18nKey":2502},{"path":2925,"localeSlug":2926,"i18nKey":2502},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","zh-hk",{"path":2928,"localeSlug":2929,"i18nKey":2502},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","zh-tw",{"path":2931,"localeSlug":2932,"i18nKey":2502},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","zh-cn",[2921,2509,2494,2509,2925,2509,2928,2509,2931,2509],1784646817544]