每日C++ - 谈一下 Visual Studio Code 的 C++ 开发

罗均
2023-12-01

说说 Visual Studio Code

关于 Visual Studio Code,相信广大看官们已经不感到陌生了,为什么短短几年它能够在 IDE 市场上快速提升占有率?虽然 Visual Studio Code 比它的老师 Atom 出来晚,但背靠微软强大的支持,不少工程狮们也发现,Visual Studio Code 从主流语言 C/C++,Java,JS,Python,Go,再到 Scala,Ruby,Rust, Dart 等等,都提供了相当不错的能力。一体化的开发体验,丰富的插件市场和开放的插件开发生态,已经吸引了大量开发人员投向 Visual Studio Code 的怀抱。

环境搭建

Visual Studio Code & Mingw64 & CMake

当然因为 Visual Studio Code, Mingw64, CMake 都是跨平台,Windows/Linux/MacOS 都支持

Visual Studio Code 一个 C++ 实例

代码目录结构

|--Test
   |--src
   |--include
   |--bin

在 Visual Studio Code 中新建代码文件,如下

|--Test
   |--src
   	  |--sum.cpp
   	  |--main.cpp
   |--include
      |--sum.h
   |--bin

sum.h 代码如下

#ifndef __SUM_H__
#define __SUM_H__
#include <iostream>

class Sum {
public:
    Sum() : value(0)
    {
        std::cout << "Sum ctor" << std::endl;
    }

    Sum add(int i);
    int get();

private:
    int value;
};

#endif  // __SUM_H__

sum.cpp 代码如下

#include "sum.h"

Sum Sum::add(int i)
{
    value += i;
    return *this;
}

int Sum::get()
{
    return value;
}

main.cpp 代码如下

#include <iostream>
#include "sum.h"

int main()
{
    Sum sum;
    for (int i = 1; i <= 100; i++) {
        sum.add(i);
    }
    std::cout << "sum = " << sum.get() << std::endl;
    return 0;
}

通过以下编译命令行编译

g++ ./src/sum.cpp ./src/main.cpp -I./include -o ./bin/main

执行打印

sum = 5050

Visual Studio Code & CMake 编译

Visual Studio Code 高频快捷键

快捷键功能描述
Ctrl + P转到文件 / 其它常用操作 (可用作文件视图切换…)
Ctrl + Shift + P打开命令面板 (Open Command Pallete)
Ctrl + `打开/关闭终端 (Open/Close Terminal)
Ctrl + B打开/关闭侧边栏 (Open/Close)
Ctrl + C打开系统命令行终端
Ctrl + W关闭当前文件
Ctrl + Q打开工作区切换视图
Ctrl + TAB在已打开的文件中切换
Ctrl + \左右分屏
Ctrl + Enter下插入行
Ctrl + Shift + Enter上插入行
Alt + 向下当前代码行下移
Alt + 向上当前代码行上移
Alt + 向左回到上一个代码视图
Alt + 向右回到下一个代码视图
F2变量重命名
F12转到定义
Ctrl + F12转到实现
Shift + F12转到引用
Shift + F9打断点
F10单步调试,不进入函数
F11单步调试,进入函数
F5启动调试
Alt + Shift + F格式化文档

CMake

Visual Studio Code 需安装如下 CMake 插件

CMake
CMake Tools

CMake 基础语法

  • CMake 语法格式: 指令(参数1 参数2 …) 或 指令(参数1;参数2;…)
  • CMake 指令是大小写无关的
  • CMake 参数和变量是大小写相关的

CMake 常用指令

cmake_minimum_required
指定 cmake 最小版本号

project 
定义工程名称,可指定编程语言
project(name [CXX][C][Java])

set
显示定义变量
set(SRC hello.cpp)
取值 ${SRC}, 在 if 中直接 SRC 取值

include_directories
向工程添加多个特定的头文件搜索路径,相当于 -I
include_directories(./usr/include ./include)

link_directories
向工程添加多个特定的库文件搜索路径,相当于 -L
link_directories(./lib)

add_library
生成库文件
add_library(libname [SHARED|STATIC|MODULE|EXCLUDE_FROM_ALL] src1...srcN)
SHARED - 动态库
STATIC - 静态库
src1...srcN - 源文件

add_compile_options
添加编译参数
add_compile_options(-Wall -std=c++11 -g)

add_executable
生成可执行文件
add_executable(main main.cpp)

target_link_libraries
为 target 添加需要链接的共享库
target_link_libraries(targetname lib1...libN)
如 target_link_libraries(main hello)

add_subdirectory
向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置
add_subdirectory(source_dir [binary_dir][EXCLUDE_FROM_ALL])
如 add_subdirectory(./src) 那么 src 下必须有 CMakeLists.txt 文件

aux_source_directory
发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表
如:
// 定义 SRC 变量,其值为当前目录下所有的源代码文件
aux_source_directory(./src SRC)
// 依赖 SRC 代表的源文件,生成 main 可执行文件
add_executable(main ${SRC})

CMake 常用变量

CMAKE_C_FLAGS
gcc 编译选项

CMAKE_CXX_FLAGS
g++ 编译选项

CMAKE_BUILD_TYPE
编译类型
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_BUILD_TYPE Release)

CMAKE_C_COMPILER
指定 gcc 编译器

CMAKE_CXX_COMPILER
指定 g++ 编译器

// 为 cmake 指定编译器,常用的方式有两种
1. 设定环境变量
export CC=='XXXgcc'
export CXX='XXXg++'
2. 使用 CMake 参数
cmake -D CMAKE_C_COMPILER='XXXgcc' CMAKE_CXX_COMPILER='XXXg++'

XXX_SOURCE_DIR
源文件存放路径

EXECUTABLE_OUTPUT_PATH
可执行文件输出的存放路径

LIBRARY_OUTPUT_PATH
库文件输出的存放路径

CMake 构建方式

内部构建 in-source build
外部构建 out-source build

在工程目录下新建 build

在 build 目录下 cmake ..,编译上级目录的 CMakeLists.txt,生成 Makefile 等文件

make

推荐使用外部构建

Tips:

windows 下如果安装了 Visual Studio 那么"cmake ." 默认生成的 MSBUILD 使用的工程编译构建文件,类似如下

ProjectName.sln
ALL_BUILD.vcxproj
...

如果需要生成 GNU Makefile,有以下两种方式

1. CMake 命令行方式
cmake . -G "Unix Makefiles"

然后就像在 Unix 系统中,执行 “make clean; make” 编译即可
2. 通过 Preload.cmake 文件设置 CMAKE_GENERATOR

Preload.cmake 添加以下内容:
   
set(CMAKE_GENERATOR "Unix Makefiles" CACHE INTERNAL "" FORCE)

然后执行 cmake . 即能生成 Makefile 文件

Test 工程编译构建

# 最小 cmake 版本 3.0
cmake_minimum_required(VERSION 3.0)
# 工程名 TEST
project(TEST)

# 设置头文件搜索目录
set(INCLUDE_DIRECTORIES ./include)
# 设置库文件搜索目录
set(LINK_DIRECTORIES ./lib)
# 设置生成目标名称
set(TARGET main)
# 设置目标可执行文件生成的目录
set(EXECUTABLE_OUTPUT_PATH ./bin)

# SRC 代表 ./src 的所有源文件
aux_source_directory(./src SRC)
# 添加编译选项
add_compile_options(-Wall;-fpermissive)

# 包含头文件搜索目录
include_directories(${INCLUDE_DIRECTORIES})
# 包含库文件搜索目录
link_directories(${LINK_DIRECTORIES})

# 添加可执行文件
add_executable(${TARGET} ${SRC})

我们通过 “cmake .” 生成 cmake 文件,然后执行 make 命令生成可执行文件。

总结

C++ IDE 有很多,我们选择一款任何一款 IDE 的初衷是能够满足我们的开发目标,提升个人和团队的整体效率而做出的选择。当然也需要合理考虑公司的商业价值实现。

祝愉快!

 类似资料: