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