2026/4/4 3:29:47
网站建设
项目流程
用wordpress做的站点,制作一个景点介绍的网站html,做窗帘什么网站,网站美工和网页设计的区别CMake 构建实例#xff1a;从简单到复杂实战项目
下面通过4个逐步升级的实际项目实例#xff0c;展示 CMake 的完整构建流程、目录结构和 CMakeLists.txt 编写。所有实例都遵循现代 CMake 最佳实践#xff08;CMake 3.15#xff0c;target-centric 写法#xff0c;源码外…CMake 构建实例从简单到复杂实战项目下面通过4个逐步升级的实际项目实例展示 CMake 的完整构建流程、目录结构和CMakeLists.txt编写。所有实例都遵循现代 CMake 最佳实践CMake 3.15target-centric 写法源码外构建。实例1单文件 Hello World最简单入门目录结构hello/ ├── CMakeLists.txt └── main.cppmain.cpp#includeiostreamintmain(){std::coutHello, CMake World!std::endl;return0;}CMakeLists.txtcmake_minimum_required(VERSION 3.15) project(HelloWorld LANGUAGES CXX) add_executable(${PROJECT_NAME} main.cpp) target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)构建命令mkdirbuildcdbuild cmake..-DCMAKE_BUILD_TYPERelease cmake --build../HelloWorld实例2多文件 头文件目录典型小型项目目录结构math_app/ ├── CMakeLists.txt ├── main.cpp ├── include/ │ └── math_utils.h └── src/ └── math_utils.cppmath_utils.h#pragmaoncedoubleadd(doublea,doubleb);doublemultiply(doublea,doubleb);math_utils.cpp#includemath_utils.hdoubleadd(doublea,doubleb){returnab;}doublemultiply(doublea,doubleb){returna*b;}main.cpp#includeiostream#includemath_utils.hintmain(){std::cout3 5 add(3,5)std::endl;std::cout4 * 7 multiply(4,7)std::endl;}CMakeLists.txtcmake_minimum_required(VERSION 3.15) project(MathApp LANGUAGES CXX) add_executable(${PROJECT_NAME} main.cpp src/math_utils.cpp ) target_include_directories(${PROJECT_NAME} PRIVATE include) target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)构建同上实例3分离库 多目录中型项目推荐结构目录结构calculator/ ├── CMakeLists.txt # 根目录 ├── app/ │ ├── CMakeLists.txt │ └── main.cpp ├── lib/ │ ├── CMakeLists.txt │ ├── include/calculator/ │ │ └── core.h │ └── src/ │ └── core.cpp └── tests/ # 可选后续加测试lib/include/calculator/core.h#pragmaoncenamespacecalc{doubleadd(doublea,doubleb);doublesubtract(doublea,doubleb);}lib/src/core.cpp#includecalculator/core.hnamespacecalc{doubleadd(doublea,doubleb){returnab;}doublesubtract(doublea,doubleb){returna-b;}}app/main.cpp#includeiostream#includecalculator/core.hintmain(){std::cout10 - 4 calc::subtract(10,4)std::endl;return0;}lib/CMakeLists.txt库add_library(calc_core STATIC src/core.cpp ) target_include_directories(calc_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_compile_features(calc_core PUBLIC cxx_std_17)app/CMakeLists.txt可执行add_executable(calculator_app main.cpp) target_link_libraries(calculator_app PRIVATE calc_core)根 CMakeLists.txtcmake_minimum_required(VERSION 3.15) project(Calculator LANGUAGES CXX) add_subdirectory(lib) add_subdirectory(app)构建命令mkdirbuildcdbuild cmake..-DCMAKE_BUILD_TYPERelease cmake --build../app/calculator_app实例4完整项目带静态/动态库选项 安装规则 测试扩展实例3添加可选生成共享库安装规则make install简单单元测试根 CMakeLists.txt增强版cmake_minimum_required(VERSION 3.15) project(Calculator LANGUAGES CXX) # 选项是否构建共享库默认静态 option(BUILD_SHARED_LIBS Build shared libraries OFF) add_subdirectory(lib) add_subdirectory(app) add_subdirectory(tests) # 可选 # 安装规则 install(TARGETS calculator_app DESTINATION bin ) install(TARGETS calc_core DESTINATION lib ) install(DIRECTORY lib/include/ DESTINATION include )tests/CMakeLists.txt使用 CMake 自带测试find_package(GTest QUIET) if(GTest_FOUND) add_executable(calc_test test_core.cpp) target_link_libraries(calc_test PRIVATE calc_core GTest::gtest_main) add_test(NAME CalcTest COMMAND calc_test) else() message(WARNING Google Test not found, skipping tests) endif()构建 安装 测试mkdirbuildcdbuild cmake..-DCMAKE_BUILD_TYPERelease -DBUILD_SHARED_LIBSON cmake --build.ctest.# 运行测试如果有 GTestsudocmake --install.--prefix /usr/local# 安装到系统总结推荐项目模板直接复制使用myproject/ ├── CMakeLists.txt ├── cmake/ # 可选自定义模块 ├── app/ │ ├── CMakeLists.txt │ └── main.cpp ├── lib/ │ ├── CMakeLists.txt │ ├── include/myproject/ │ └── src/ ├── tests/ │ └── CMakeLists.txt └── third_party/ # 第三方库如 vcpkg/conan 管理这些实例覆盖了从单文件到中大型项目的全部常见需求。你可以直接复制修改使用。如果你想看特定场景的实例如集成 Boost/Qt/OpenCV、交叉编译 Android/iOS、使用 vcpkg/Conan 包管理、生成 deb/rpm 包等告诉我我立刻给出完整可运行的例子