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