关于 vcpkg
vcpkg 是微软官方推出的 C/C++ 依赖管理系统,原生支持多平台,可以与 CMake 或 MSBuild 集成。
vcpkg 支持全局安装以及分项目配置的清单模式。微软官方推荐后者。
与 CMake 集成时,仅需为 CMake 指定环境变量 "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"。
更多 vcpkg 用法,请参考 Microsoft Learn 网站,本文不做赘述。
关于 Google Test
Google Test 是谷歌开发的 C++ 单元测试框架,现已有很多成熟教程。本文也不再赘述 gtest 的使用。
假定的项目结构
1 2 3 4 5 6 7 8 9 10 11
   | \home\Documents\Projects\Cpp\HelloGtest ├── build ├── src │   ├──CMakeLists.txt │   ├──*.cpp │   ├──*.h ├── test │   ├──CMakeLists.txt │   ├──TestAll.cpp ├── main.cpp ├──CMakeLists.txt
   | 
 
src 存放主要的 C++ 代码,由 src\CMakeLists.txt 编译为静态库。
test 存放编写的测试代码,由 test\CMakeLists.txt 编译为可执行文件。
根目录中有 main.cpp 作为程序入口,并由 CMakeLists.txt 与静态库相链接。
各个 CMakeLists.txt 写法
src\CMakeLists.txt
1 2 3 4 5 6
   |  file(GLOB_RECURSE SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp") file(GLOB_RECURSE HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
 
  add_library(NumericalRecipesLibs STATIC ${SOURCES} ${HEADERS})
 
  | 
 
test\CMakeLists.txt
1 2 3 4 5 6 7 8 9 10 11 12 13
   |  find_package(GTest CONFIG REQUIRED)
  set(TEST_SOURCES TestAll.cpp) add_executable(AllTests ${TEST_SOURCES})
  target_include_directories(AllTests PRIVATE ${CMAKE_SOURCE_DIR}/src)
  target_link_libraries(AllTests PRIVATE GTest::gtest_main NumericalRecipesLibs)
  enable_testing()
  add_test(NAME AllTests COMMAND AllTests)
 
  | 
 
\CMakeLists.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   | cmake_minimum_required(VERSION 3.20) set(CMAKE_TOOLCHAIN_FILE "C:\\Programming\\Cpp\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake")
  project(NumericalRecipes LANGUAGES CXX)
  set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON)
  add_subdirectory(src) add_subdirectory(test)
  add_executable(NumericalRecipes main.cpp)
 
 
 
 
 
  target_link_libraries(NumericalRecipes PRIVATE NumericalRecipesLibs)
   | 
 
运行测试
这样,可以直接在 Clion 中运行对应的 TEST() 了。
如果需要使用命令行:
1 2 3 4
   | cd build cmake .. cmake --build . --config Debug  ctest ctest --verbose -C Debug 
   |