关于 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 都支持
代码目录结构
|--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
快捷键 | 功能描述 |
---|---|
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 | 格式化文档 |
Visual Studio Code 需安装如下 CMake 插件
CMake
CMake Tools
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_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
库文件输出的存放路径
内部构建 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 文件
# 最小 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 的初衷是能够满足我们的开发目标,提升个人和团队的整体效率而做出的选择。当然也需要合理考虑公司的商业价值实现。
祝愉快!