C/C++ 大型工程工具鏈搭建

endingly發表於2022-03-13

一、配置環境要求

  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 的,大家可以快樂的寫程式碼了。

相關文章