近期在學習Ubuntu上cpp編程的內容,整理以下VSCode與cpp相關的開發環境部署內容,以及gtest測試(後面看一下如何進行覆蓋度測試)
準備工作
OS: Ubuntu 16.04 LTS
步驟:
- 配置VSCode開發環境
- 安裝GTest
- 項目實例
1. 配置VSCode開發環境
1.1 安裝VSCode
這裏採用是從VScode官網下載.deb文件進行安裝。
安裝完成後,打開VSCode,主界面如下:
1.2 插件配置
通過左側的Extension安裝插件,操作如下
需要安裝的插件有
C/C++ (Microsoft)
CMake Tools(Microsoft)
GitLens(Eric Amodio)
2. CMake安裝與測試
2.1 CMake安裝
我的筆記本中已經安裝了cmake,因此這部分沒有進行安裝測試。
在terminal下鍵入依次以下命令進行CMake的安裝
wget https://cmake.org/files/v3.14/cmake-3.14.5-Linux-x86_64.tar.gz
tar -xvf cmake-3.14.5.tar
cd cmake-3.14.5
./bootstrap
make
make install
個人的偏好,如果要一鍵安裝,可將上述的語句寫入到一個install_cmake.sh的文件中,chmod爲777.
執行結束後,在terminal中執行 cmake --version
查看安裝版本號。
2.2 CMake測試
在VSCode中打開一個新建的Folder,並新建main.cpp
文件,內容很簡單,hello world。
#include <iostream>
using namespace std;
int main(){
cout<<"Hello World!"<<endl;
return 0;
}
按【F1】後進行CMake的配置
選擇一個編譯器,這裏我選擇了GCC for x86_64-linux-gnu 5.4.0
選擇結束後,右側提示CMakeLists.txt還不存在,需要創建一個CMakeLists.txt,點擊Create創建,在上方填入項目名,選擇executable,回車即可,生成的CMakeLists.txt如下所示
cmake_minimum_required(VERSION 3.0.0)
project(Project VERSION 0.1.0)
include(CTest)
enable_testing()
add_executable(Project main.cpp)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
按【F7】進行編譯,編譯結束後,在build路徑下執行./Project
,可以看到輸出了Hello World!
3. GTest安裝與測試
3.1 GTest安裝
# 下載最新的release 並保存爲 googletest-1.8.1.tar.gz
wget -O googletest-1.8.1.tar.gz https://github.com/google/googletest/archive/release-1.8.1.tar.gz
# 解壓
tar -zxf googletest-1.8.1.tar.gz
# 進入解壓後的目錄
cd googletest-release-1.8.1
# 爲編譯創建一個目錄
mkdir build && cd build
cmake ..
make
# 安裝
sudo make install
3.2 GTest測試
#include <gtest/gtest.h>
int add(int a, int b){
return a+b;
}
TEST(testCase, test0){
EXPECT_EQ(add(2,3),5);
}
int main(int argc, char **argv){
testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}
執行下列命令
g++ test.cpp -lgtest -lpthread
./a.out
整體配置
項目的大致結構簡單定義如下
├── CMakeLists.txt
├── main.cpp
├── src
│ └── myproject
│ └── myclass.hpp
└── test
├── CMakeLists.txt
└── test_my_class.cpp
挖坑,這周補上。
這裏參考https://blog.csdn.net/joelcat/article/details/90766192