[{"data":1,"prerenderedAt":2887},["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":2502},{"id":4,"title":5,"body":6,"chapterDepth":34,"chapterOrder":2490,"date":2491,"description":12,"docKey":2492,"docRoot":2493,"docTitle":2494,"extension":2495,"isWikiDoc":237,"isWikiIndex":2496,"meta":2497,"navigation":237,"path":2498,"seo":2499,"stem":2500,"wikiDepth":34,"__hash__":2501},"wiki\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},"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":12},"wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","QBOVTHvI20Ssm20RfnonAFaiEP3LBUsfdnud4wPz28Y",[2503,2509,2514,2519,2524,2529,2534,2539,2544,2549,2554,2559,2564,2569,2574,2579,2584,2589,2594,2599,2604,2609,2614,2619,2624,2629,2634,2639,2644,2649,2654,2659,2664,2669,2674,2679,2684,2689,2694,2699,2704,2709,2714,2719,2724,2729,2734,2739,2744,2749,2754,2759,2764,2769,2774,2779,2784,2789,2794,2799,2804,2809,2814,2819,2824,2829,2834,2839,2844,2849,2854,2859,2862,2867,2872,2877,2878,2883],{"path":2504,"stem":2505,"title":2506,"date":2491,"chapterOrder":2507,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++开发环境搭建与测试","0100",0,{"path":2510,"stem":2511,"title":2512,"date":2491,"chapterOrder":2513,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识","0200",{"path":2515,"stem":2516,"title":2517,"date":2491,"chapterOrder":2518,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","数据类型与数据存放","0300",{"path":2520,"stem":2521,"title":2522,"date":2491,"chapterOrder":2523,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出","0400",{"path":2525,"stem":2526,"title":2527,"date":2491,"chapterOrder":2528,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符","0500",{"path":2530,"stem":2531,"title":2532,"date":2491,"chapterOrder":2533,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构","0600",{"path":2535,"stem":2536,"title":2537,"date":2491,"chapterOrder":2538,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组","0700",{"path":2540,"stem":2541,"title":2542,"date":2491,"chapterOrder":2543,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件","0800",{"path":2545,"stem":2546,"title":2547,"date":2491,"chapterOrder":2548,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针","0900",{"path":2550,"stem":2551,"title":2552,"date":2491,"chapterOrder":2553,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体","1000",{"path":2555,"stem":2556,"title":2557,"date":2491,"chapterOrder":2558,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","内存分区与生命周期","1100",{"path":2560,"stem":2561,"title":2562,"date":2491,"chapterOrder":2563,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":2565,"stem":2566,"title":2567,"date":2491,"chapterOrder":2568,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","函数提高与命名空间","1300",{"path":2570,"stem":2571,"title":2572,"date":2491,"chapterOrder":2573,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装","1400-0100",{"path":2575,"stem":2576,"title":2577,"date":2491,"chapterOrder":2578,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","对象初始化和清理","1400-0200",{"path":2580,"stem":2581,"title":2582,"date":2491,"chapterOrder":2583,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","对象模型与this指针","1400-0300",{"path":2585,"stem":2586,"title":2587,"date":2491,"chapterOrder":2588,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元与运算符重载","1400-0400",{"path":2590,"stem":2591,"title":2592,"date":2491,"chapterOrder":2593,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承","1400-0500",{"path":2595,"stem":2596,"title":2597,"date":2491,"chapterOrder":2598,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态","1400-0600",{"path":2600,"stem":2601,"title":2602,"date":2491,"chapterOrder":2603,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象","1400",{"path":2605,"stem":2606,"title":2607,"date":2491,"chapterOrder":2608,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":2610,"stem":2611,"title":2612,"date":2491,"chapterOrder":2613,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":2615,"stem":2616,"title":2617,"date":2491,"chapterOrder":2618,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":2620,"stem":2621,"title":2622,"date":2491,"chapterOrder":2623,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识","1800-0100",{"path":2625,"stem":2626,"title":2627,"date":2491,"chapterOrder":2628,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":2630,"stem":2631,"title":2632,"date":2491,"chapterOrder":2633,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":2635,"stem":2636,"title":2637,"date":2491,"chapterOrder":2638,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-yu-deque-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector与deque容器","vector与deque容器","1800-0400",{"path":2640,"stem":2641,"title":2642,"date":2491,"chapterOrder":2643,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-stack-queue-list-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-stack-queue-list容器","stack \u002F queue \u002F list 容器","1800-0500",{"path":2645,"stem":2646,"title":2647,"date":2491,"chapterOrder":2648,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-set-map-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-set-map容器","set \u002F map 容器","1800-0600",{"path":2650,"stem":2651,"title":2652,"date":2491,"chapterOrder":2653,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-han-shu-dui-xiang-yu-wei-ci","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-函数对象与谓词","函数对象与谓词","1800-0700",{"path":2655,"stem":2656,"title":2657,"date":2491,"chapterOrder":2658,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-常用算法","常用算法","1800-0800",{"path":2660,"stem":2661,"title":2662,"date":2491,"chapterOrder":2663,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程","1800",{"path":2665,"stem":2666,"title":2667,"date":2491,"chapterOrder":2668,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换","1900",{"path":2670,"stem":2671,"title":2672,"date":2491,"chapterOrder":2673,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto","2000-0100",{"path":2675,"stem":2676,"title":2677,"date":2491,"chapterOrder":2678,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":2680,"stem":2681,"title":2682,"date":2491,"chapterOrder":2683,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":2685,"stem":2686,"title":2687,"date":2491,"chapterOrder":2688,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":2690,"stem":2691,"title":2692,"date":2491,"chapterOrder":2693,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","范围 for 循环","2000-0500",{"path":2695,"stem":2696,"title":2697,"date":2491,"chapterOrder":2698,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","结构化绑定","2000-0600",{"path":2700,"stem":2701,"title":2702,"date":2491,"chapterOrder":2703,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":2705,"stem":2706,"title":2707,"date":2491,"chapterOrder":2708,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":2710,"stem":2711,"title":2712,"date":2491,"chapterOrder":2713,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针","2000-0900",{"path":2715,"stem":2716,"title":2717,"date":2491,"chapterOrder":2718,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移动语义","2000-1000",{"path":2720,"stem":2721,"title":2722,"date":2491,"chapterOrder":2723,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表达式","2000-1100",{"path":2725,"stem":2726,"title":2727,"date":2491,"chapterOrder":2728,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":2730,"stem":2731,"title":2732,"date":2491,"chapterOrder":2733,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":2735,"stem":2736,"title":2737,"date":2491,"chapterOrder":2738,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":2740,"stem":2741,"title":2742,"date":2491,"chapterOrder":2743,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":2745,"stem":2746,"title":2747,"date":2491,"chapterOrder":2748,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":2750,"stem":2751,"title":2752,"date":2491,"chapterOrder":2753,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":2755,"stem":2756,"title":2757,"date":2491,"chapterOrder":2758,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":2760,"stem":2761,"title":2762,"date":2491,"chapterOrder":2763,"chapterDepth":51,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 与 join","2000-1900-0100",{"path":2765,"stem":2766,"title":2767,"date":2491,"chapterOrder":2768,"chapterDepth":51,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 与 lock_guard","2000-1900-0200",{"path":2770,"stem":2771,"title":2772,"date":2491,"chapterOrder":2773,"chapterDepth":51,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":2775,"stem":2776,"title":2777,"date":2491,"chapterOrder":2778,"chapterDepth":51,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":2780,"stem":2781,"title":2782,"date":2491,"chapterOrder":2783,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","并发编程","2000-1900",{"path":2785,"stem":2786,"title":2787,"date":2491,"chapterOrder":2788,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":2790,"stem":2791,"title":2792,"date":2491,"chapterOrder":2793,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 简介","2000-2100",{"path":2795,"stem":2796,"title":2797,"date":2491,"chapterOrder":2798,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++","2000",{"path":2800,"stem":2801,"title":2802,"date":2491,"chapterOrder":2803,"chapterDepth":51,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定时器与异步 IO","2100-0100-0100",{"path":2805,"stem":2806,"title":2807,"date":2491,"chapterOrder":2808,"chapterDepth":51,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基础","2100-0100-0200",{"path":2810,"stem":2811,"title":2812,"date":2491,"chapterOrder":2813,"chapterDepth":51,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":2815,"stem":2816,"title":2817,"date":2491,"chapterOrder":2818,"chapterDepth":51,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":2820,"stem":2821,"title":2822,"date":2491,"chapterOrder":2823,"chapterDepth":51,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":2825,"stem":2826,"title":2827,"date":2491,"chapterOrder":2828,"chapterDepth":51,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成","2100-0100-0600",{"path":2830,"stem":2831,"title":2832,"date":2491,"chapterOrder":2833,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio异步IO库","2100-0100",{"path":2835,"stem":2836,"title":2837,"date":2491,"chapterOrder":2838,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen线性代数库","2100-0200",{"path":2840,"stem":2841,"title":2842,"date":2491,"chapterOrder":2843,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV计算机视觉库","2100-0300",{"path":2845,"stem":2846,"title":2847,"date":2491,"chapterOrder":2848,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL点云库","2100-0400",{"path":2850,"stem":2851,"title":2852,"date":2491,"chapterOrder":2853,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代数库","2100-0500",{"path":2855,"stem":2856,"title":2857,"date":2491,"chapterOrder":2858,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习","2100",{"path":2068,"stem":2860,"title":2069,"date":2491,"chapterOrder":2861,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","2200-0100",{"path":2863,"stem":2864,"title":2865,"date":2491,"chapterOrder":2866,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","顶层CMake与公共编译选项","2200-0200",{"path":2868,"stem":2869,"title":2870,"date":2491,"chapterOrder":2871,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src与lib模块CMake详解","2200-0300",{"path":2873,"stem":2874,"title":2875,"date":2491,"chapterOrder":2876,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方库依赖写法","2200-0400",{"path":2498,"stem":2500,"title":5,"date":2491,"chapterOrder":2490,"chapterDepth":34,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},{"path":2879,"stem":2880,"title":2881,"date":2491,"chapterOrder":2882,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":2496},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":2493,"stem":2884,"title":2885,"date":2491,"chapterOrder":2886,"chapterDepth":2508,"docKey":2492,"docRoot":2493,"docTitle":2494,"isWikiDoc":237,"isWikiIndex":237},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",null,1784505235872]