关于 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
|