15

C/C++ 大型工程工具链搭建 - endingly

 2 years ago
source link: https://www.cnblogs.com/endingly/p/16001685.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一、配置环境要求#

  1. C/C++ 编译器

    此项有系统区别,如果是 Windows 平台,那么可以下载 VS2022 社区版,它自带 MSVC 编译器。如果嫌它太笨重,也可以直接下载 MSVC 再发行组件。如果是 Linux 平台可以直接通过系统自带的包管理器下载 GCC 编译器,版本原则上没有要求。

  2. CMake

    CMake 是跨平台的构建工具,记得配置好环境变量。

  3. VScode

    开源并且跨平台的编辑器,如果你自己喜欢别的,也可以。

    VScode 的插件列表如下:

    • C/C++
    • CMake
    • CMake Tools
    • Gitlens
    • Test Explorer UI
    • C++ TestMate
  4. vcpkg

    由微软主导的 C/C++ 包管理器,也可以一用别的,看自己。记得配置环境变量。


二、开始搭建#

其实搭建工程模板主要是 CMake 的事情,即主要是给出能用的 CMakeLists.txt ,这边为了省事儿,直接给出两个 CMakeLists.txt 。不过在此之前需要给出工程目录结构,如下图。

工程目录一览

build 目录是由 CMake 自动产生的,我们不用管,主要讲一下其他几个目录的。include 里面放头文件,src 目录下面放源文件,tests 目录下面放单元测试。可以看到,整个工程只有两个 CMakeLists.txt ,一个存在于顶级目录,一个存在于 tests 目录下。现在我们给出两个 CMakeLists.txt 的配置。

# 顶层目录的 CMakelists.txt
cmake_minimum_required(VERSION 3.10)
# 下面这句配置 vcpkg 与 cmake 的联动,位置必须在 project() 之前,路径可以改成与自己相符的
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")
project(exampleProject)

# 设置构建结果的输出路径
#set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
set(CMAKE_CXX_STANDARD 11)

# 包含之前所说的 include 目录,里面都是头文件
include_directories(include)
# 将 src 目录下的所有源文件加入后面的变量之中
aux_source_directory(src DIR_LIB_SRCS)

# 构建生成 .lib 文件
add_library(${PROJECT_NAME} ${DIR_LIB_SRCS})

# 添加子目录 tests
add_subdirectory(tests)
# tests 子目录下的 CMakelists.txt
cmake_minimum_required(VERSION 3.10)
# 下面这句配置 vcpkg 与 cmake 的联动,位置必须在 project() 之前,路径可以改成与自己相符的
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")

# 子目录下需要构建另一个工程
project(exampleProject_test)

set(CMAKE_CXX_STANDARD 11)

# 包含父工程当中的头文件,链接器需要使用
include_directories(include)
# 以及 tests 目录下的源文件,这些文件用于编写单元测试
aux_source_directory(./ TEST_SRC_FILE)

# 寻找 googletest 单元测试框架,利用 vcpkg 下载
find_package(GTest REQUIRED)

# 构建生成单元测试可执行文件
add_executable(${PROJECT_NAME} ${TEST_SRC_FILE})

# 将父工程中生成的 .lib 文件以及 googletest 的库文件链接到此 exe
target_link_libraries(${PROJECT_NAME} PRIVATE exampleProject GTest::gtest GTest::gtest_main)

上面讲了 CMakeLists.txt 的配置,下载需要利用 vcpkg 下载 googletest 单元测试框架,不然原本的 CMakeLists.txt 会报错找不到包。

当 vcpkg 正确安装之后,我们在命令行打入 vcpkg --version 时可以看到以下内容。

vcpkg正确安装

现在利用它来下载 googletest ,打入 vcpkg install gtest:x64-windows 后面的平台可以自己改,如果是 Linux 平台,那么就是 vcpkg install gtest:x64-linux 。如果下载完成了,命令行会出现以下文字。

下载成功

之后我们的 CMake 就不会报错找不到包了。

如果 vscode 安装了插件 C/C++ TestMate 之后还可以直接从侧边栏中看到单元测试列表,而且可以细粒度执行,比较好用,完整的编写环境截图看起来是下面这个样子。

完整的环境

运行调试什么的都是 OK 的,大家可以快乐的写代码了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK