Linux 下的VSCode C++配置
Visual Studio Code编辑时的常用快捷键
F1或Ctrl+Shift+P 打开VS Code的命令Shell Ctrl+P 打开VS code文件/符号查询窗口,输入”>”可以进入F1同样的Shell Ctrl+Shift+O 查找符号,函数,属性 Ctrl+G 跳转到某行 Ctrl+[ 代码缩进 Ctrl+] 代码往前移进 Ctrl+F 查找文本 Ctrl+H 查找替换 Ctrl+Shift+F 整文件夹中查找 Ctrl+ + 放大文本 Ctrl+ - 缩小文本 Ctrl+ Home 移动到文件头 Ctrl+ End 移动到文件尾 Ctrl+ Tab 在多个文件之间切换 Ctrl+ / 注释/解注释鼠标选中的代码块 Ctrl+ \ 切分当前窗口 Ctrl+ N 新建文件 F12 跳转到变量,函数,类型定义 Alt+鼠标点击 连续选中多个文本,同时编辑 Alt+F12 查找所有对当前变量,函数,类型的引用 Alt+<-方向键 跳回到上一视图 Alt+上下方向键 上下移动当前光标所在行 Shift+Alt+上下方向键 向上/向下复制一行 Ctrl+Enter 在当前行下边插入一行 Ctrl+Shift+Enter 在当前行上方插入一行 Alt+Shift+鼠标左键 列编辑
关于在ubuntu中用vscode编译调试C\C++
必须安装的包
# 安装必须的包
sudo apt-get install build-essential
sudo apt-get install cmake git gcc g++
.vscode文件中包含了关于VSCode编辑器的一些配置文件。
- c_cpp_properties.json文件中主要是配置头文件查找路径,当使用到第三方库,比如Boost,OpenCV等,就需要在这个文件中添加这些库的头文件路径。
- setting.json文件对当前的工程进行了一些配置。
- build是cmake构建工程是产生的,里面包含了cmake产生的所有内容。
- CMakeLists.txt是整个工程的核心,它定义了整个工程的编译流程。
配置文件参考
c_cpp_properties.json
{ "configurations": [ { "name": "Mac", "includePath": [ "/usr/include", "/usr/local/include", "${workspaceFolder}" ], "defines": [], "intelliSenseMode": "clang-x64", "browse": { "path": [ "/usr/include", "/usr/local/include", "${workspaceFolder}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" }, "macFrameworkPath": [ "/System/Library/Frameworks", "/Library/Frameworks" ], "compilerPath": "/usr/bin/gcc", "cStandard": "c11", "cppStandard": "c++17" }, { "name": "Linux", "includePath": [ "/usr/include", "/usr/local/include", "${workspaceFolder}", "/usr/include/linux", "/usr/include/c++/7/tr1", "/home/azmddy/Downloads/boost_1_68_0" ], "defines": [], "intelliSenseMode": "gcc-x64", "browse": { "path": [ "/usr/include", "/usr/local/include", "${workspaceFolder}", "/home/azmddy/Downloads/boost_1_68_0" ], "limitSymbolsToIncludedHeaders": false, "databaseFilename": "" }, "compilerPath": "/usr/bin/gcc", "cStandard": "c11", "cppStandard": "c++17", "compileCommands": "${workspaceFolder}/build/compile_commands.json" }, { "name": "Win32", "includePath": [ "${workspaceFolder}" ], "defines": [ "_DEBUG", "UNICODE", "_UNICODE" ], "compilerPath": "C:\\MinGW\\bin\\gcc.exe", "intelliSenseMode": "clang-x64", "browse": { "path": [ "${workspaceFolder}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" }, "cStandard": "c11", "cppStandard": "c++17" } ], "version": 4 }
tasks.json
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "build", //相当与名字,与后面launch.json中preLaunchTask参数要保持一致 "type": "shell", "command": "g++", "args": [ //编译所需要的参数,包括编译方式,源文件,和生成的可执行文件 "-g", "-Wall", "-std=c++17", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "presentation": { //控制终端显示 "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": false, "clear": true }, }, { "label": "run", "type": "shell", "dependsOn": ["build"], //依赖的配置,运行之前需要编译链接形成可执行文件 "command": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "presentation": { //控制终端显示 "echo": false, // 执行命令是否输出到集成终端 "reveal": "always", "focus": false, "panel": "shared", //控制是否共享面板 "showReuseMessage": false, //是否显示"终端终端将被重用,是否显示"的提示 "clear": true //执行任务前是否清除终端 }, //"problemMatcher": [], "group": { "kind": "test", "isDefault": true } } ] }
launch.json
{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", //程序可执行文件的路径 "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, //设为false时使用集成终端,true为外置终端 "linux": { "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb" }, "windows": { "MIMode": "gdb", "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe" }, "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build" } ] }
setting.json
{ "C_Cpp.default.cppStandard": "c++14", "C_Cpp.intelliSenseEngineFallback": "Enabled", "C_Cpp.errorSquiggles": "Disabled", "editor.mouseWheelZoom": true, "files.autoSave": "afterDelay", "files.autoSaveDelay": 100, "editor.tabCompletion": "on", "files.useExperimentalFileWatcher": true, "files.associations": { "iostream": "cpp", "*.tcc": "cpp" }, "cmake.debugConfig": { "externalConsole": true }, "cmake.configureOnOpen": true, "cmake-tools-helper.cmake_download_path": "/home/undefined/.vscode/extensions/maddouri.cmake-tools-helper-0.2.1/cmake_download", "explorer.confirmDelete": false }
CMakeLists.txt
# CMake 最低的版本要求 cmake_minimum_required(VERSION 3.12.0) # 定义项目名称变量PROJECT_NAME, 默认值为demo set(PROJECT_NAME demo) # 项目名称以及版本 project(${PROJECT_NAME} VERSION 0.1.0) # 查找当前目录下的所有源文件 # 并将名称保存到 DIR_SRCS 变量 aux_source_directory(. DIR_SRCS) # 设置C++的版本 set(CMAKE_CXX_STANDARD 14) # 指定生成目标 add_executable(${PROJECT_NAME} ${DIR_SRCS}) ############################################################################################################## ################################### 有关第三方库的使用 ############################################### ############################################## OpenCV ######################################################## # 设置OpenCVModule的路径 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "/home/undefined/Downloads/opencv-3.4.1/build") # 查找 OpenCV3.4.1的头文件和库文件路径以及库文件 find_package(OpenCV 3.4.1 REQUIRED) # 包含OpenCV头文件目录 include_directories(${OpenCV_INCLUDE_DIRS}) message("OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}") message("OpenCV_LIBS: ${OpenCV_LIBS}") # 链接OpenCV库文件 target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS}) ############################################################################################################## ############################################## Boost ######################################################### # 查找 Boost_1_68_0的特定的库 find_package(Boost 1.68.0 REQUIRED COMPONENTS regex) # 包含Boost头文件目录 include_directories(${Boost_INCLUDE_DIRS}) message("Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}") message("Boost_LIBRARIES: ${Boost_LIBRARIES}") # 链接Boost库文件 target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES}) ############################################################################################################## ############################################## OpenGL ######################################################## # opengl 头文件路径保存在 OPENGL_INC_DIR 变量 set(OPENGL_INC_DIR /usr/local/include /usr/include /usr/include/GL) # opengl 链接库路径保存在 OPENGL_LDFLAGS 变量 set(OPENGL_LDFLAGS /usr/local/lib /usr/lib64) # opengl 链接库名称保存在 OPENGL_LIBS 变量 set(OPENGL_LIBS GL GLU glut GLEW gltools glfw3 X11 Xxf86vm Xrandr pthread Xi dl Xinerama Xcursor m) # OpenGL头文件目录 include_directories(${OPENGL_INC_DIR}) # OpenGL库文件目录 link_directories(${OPENGL_LDFLAGS}) # 链接OpenGL库文件 target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBS}) ###############################################################################################################
VScode 编译运行单个c++文件
- 安装vscode的C\C++插件。
- 配置launch.json和task.json这两个文件
- 编译调试C++程序
- (注意以上过程请确保在ubuntu里面安装了c++编译器,和vscode)
第一步 在vscode中安装C++的插件
编辑test.cpp文件
#include <iostream> using namespace std; int main(int argc,char* argv[]) { cout << "Hello, world!" << endl; return 0; }
在test.cpp文件中,ctrl + shift + p 快捷键, 操作完后vscode会自动创建launch.json和tasks.json
本次配置文件示例
launch.json
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build" } ] }
tasks.json
{ "version": "2.0.0", "tasks": [ { "type": "shell", "label": "build", "command": "/usr/bin/g++", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "/usr/bin" } } ] }
c_cpp_properties.json
{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "clang-x64" } ], "version": 4 }
VSCode运行多文件C++教程:使用CMake
原文地址:https://blog.csdn.net/frostime/article/details/86756983
CMake是什么
你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。
CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。一些使用 CMake 作为项目架构系统的知名开源项目有 VTK、ITK、KDE、OpenCV、OSG 等。
一般使用 CMake 生成 Makefile 并编译的流程如下:
- 编写 CMake 配置文件 CMakeLists.txt
- 执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile(ccmake 和 cmake 的区别在于前者提供了一个交互式的界面),其中, PATH 是 CMakeLists.txt 所在的目录
- 使用 make 命令进行编译
CMakeLists语法
cmake_minimum_required 用于设置最低版本号要求, 需要放在文件最开头位置。
语法格式为:
cmake_minimum_required(VERSION <min>[...<max>] [FATAL_ERROR])
project(Main) Sets project details such as name, version, etc. and enables languages
语法格式为:
project(<PROJECT-NAME> [LANGUAGES] [<language-name>...])
project命令会创建一些相关变量,例如:
- PROJECT_SOURCE_DIR: 整个项目的根目录,即包含PROJECT()的最近一个CMakeLists.txt文件所在的目录
- PROJECT_BINARY_DIR: Build路径,在这里就是 **、Demo1/Build
set()用于设置变量的值
语法格式为:
set(<variable> <value>... [PARENT_SCOPE])
如果<variable>不存在,那就回创建一个新的变量, 不过这里的变量是系统预定义的变量。
CMAKE_CXX_COMPILER,指的是C++的编译器,准确来讲它应该是以CMAKE_<LANG>_COMPILER 为模版的一个实例, <LANG>指的是语言,官方对它的解释是:
The full path to the compiler for LANG
比如如果我们想要设置C语言的编译器,那就是 CMAKE_C_COMPILER, 而C++的就是 CMAKE_CXX_COMPILER。
为什么C++在这里是CXX? 这就涉及到不同平台下C++程序的后缀名问题了,在Windows下我们常用的就是一个.cpp扩展名,但在其他标准中,还有很多种不同扩展名,比如 C cc cxx 等等都是C++文件的扩展名, 详情见C++后缀名的问题。
另外一个是CMAKE_CXX_FLAGS,它指的是编译的可选参数,同样,它也是CMAKE_<LANG>_FLAGS的一个实例,这里我们设置了 -g 参数,表明保留调试信息。
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
message() 函数可以把参数代表的值打印出来:
${CMAKE_CXX_FLAGS}:${<variable>} 指的就是取变量的值
message(${CMAKE_CXX_FLAGS}) # 输出 -g
message(${PROJECT_SOURCE_DIR}) # 输出 E:/my_programming/Demo1
add_executable(Demo1 main.cpp) 该命令指定了将源文件输出到可执行文件 <name>,比如在Windows平台上,就会生成一个 <name>.exe 文件
语法格式为:
add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [source1] [source2 ...])
默认情况下,可执行文件将会在Build路径下被创建。如果要改变这个位置,有很多种办法,最简单的是修改 EXECUTABLE_OUTPUT_PATH 变量的值,比如:
# 设置exe文件输出的 Bin 目录下
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/Bin)
aux_source_directory Collects the names of all the source files in the specified directory and stores the list in the <variable> provided.
aux_source_directory(<dir> <variable>)
要注意的是,这里强调了只有源文件才会被加入,比如在这个例子中,只有 a.cxx b.cxx 被加入了,而其余的 a.h CMakeLists.txt 都不会被加进去。
额外说明
- 之所以使用一个Build目录就是因为cmake出来的东西太多,最好放到一个专门的目录下
- cmake 的格式是 cmake <dir> , 其中 <dir> 中必须有 CMakeLists.txt 文件
- 由于我现在是在Windows下, 如果直接使用 cmake .. 会默认使用 Visual Studio 的编译器,可以通过 -G 指定,这里我们使用的是MinGW
- make 程序在Windows上没有,可以使用 MinGW 中的 bin/mingw32-make.exe 替代,比如我们可以复制一份此程序,然后改名为 make.exe
项目目录结构
Demo1 ├── bin │ └── Demo1 ├── build │ └── ... ├── build.sh ├── CMakeLists.txt ├── include │ └── Human.h └── src ├── Human.cpp └── main.cpp
launch.json
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "g++ build and debug active file", "type": "cppdbg", "request": "launch", // "program": "${fileDirname}/bin/${fileBasenameNoExtension}", "program": "${workspaceFolder}/bin/Demo1", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "compile", "miDebuggerPath": "/usr/bin/gdb" } ] }
tasks.json
{ "version": "2.0.0", "tasks": [ { "label": "compile", "type": "shell", "command": "${workspaceFolder}/build.sh", "group": { "kind": "build", "isDefault": true } } ] }
Human.h
#ifndef __HUMAN_H__ #define __HUMAN_H__ #include <iostream> namespace ztf{ class Human{ public: Human(){ std::cout << "construct human..." << std::endl; age=0; sex=0; }; ~Human(){ std::cout << "destruct human..." << std::endl; } public: void setAge(int a); int getAge(); void setSex(int s); int getSex(); private: int age; int sex; // 0:male, 1:female }; } // namespace #endif
Human.cpp
#include <iostream> #include "Human.h" namespace ztf{ void Human::setAge(int a){ age = a; } int Human::getAge(){ return age; } void Human::setSex(int s){ sex = s; } int Human::getSex(){ return sex; } }
main.cpp
#include <iostream> #include "Human.h" int main(int argc,char* argv[]){ ztf::Human human; human.setAge(1); human.setSex(1); std::cout << human.getSex() << std::endl; }
build.sh
cd build cmake -G "Unix Makefiles" .. > TriffleInfo make
CMakeLists.txt
cmake_minimum_required (VERSION 2.8) # CMake 最低版本号要求 project(c_code) #项目名称, 参数值是 Demo1, 该命令表示项目的名称是 Demo1 set(CMAKE_CXX_COMPILER "g++") # 显示指定使用的C++编译器 set (CMAKE_CXX_FLAGS "-g -fexec-charset=GBK") include_directories(${PROJECT_SOURCE_DIR}/include) aux_source_directory(./src SrcFiles) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) add_executable(Demo1 ${SrcFiles}) # 指定生成目标
关于在win10中用vscode编译调试C\C++
原文地址:https://www.jianshu.com/p/8933ebdac814
使用 VSCode 搭建 C/C++ 开发环境
前言
本人虽然最近偏向Java语言,但平常有时也会遇到需要临时调试些C/C++代码,虽然电脑装了VS又感觉有点大材小用,而我平常一直是在用VSCode写markdown等,实际上VSCode和Sublime、Notepad++等都有很多插件可以装,装完就可以当作“短小精悍”的IDE啦,下面就记录下前天在Win10下用VSCode搭建C/C++环境的过程。
环境
- Windows 10 64位
- VSCode 1.21.1 64位
- MinGW
搭建过程
安装C/C++插件
在 VSCode 左侧第5个插件商店下面搜索C/C++
,出现第一个插件应该就是微软官方插件,长这样:
测试代码
-
新建项目文件夹
VSC-CPP
并编写如下源文件- add.h // add() 函数声明
- add.cpp // add() 函数实现
- sub.h // sub() 函数声明
- sub.cpp // sub() 函数实现
- main.cpp // 调用 add() 与 sub()
-
add.h
#ifndef _ADD_H_ #define _ADD_H_ int add(int a, int b); #endif // ! _ADD_H_
-
add.cpp
#include "add.h" int add(int a, int b) { return a + b; }
-
sub.h
#ifndef _SUB_H_ #define _SUB_H_ int sub(int a, int b); #endif // ! _SUB_H_
-
sub.cpp
#include "sub.h" int sub(int a, int b) { return a - b; }
-
main.cpp
#include "add.h" #include "sub.h" #include <iostream> int main() { std::cout << add(1, 2) << std::endl; std::cout << sub(2, 1) << std::endl; return 0; }
修改默认配置文件
-
按
ctrl+shift+p
,在上面出现的框里输入c/cpp
,点击C/Cpp:Edit Configurations
项编辑配置文件c_cpp_properties.json
,里面很多是自动生成的,主要对应平台(Win32,因为是Windows)修改下面几项即可:具体这样修改的原因,可以参见 vscode-cpptools github提供的模板,本人参考网上配置文件修改后会出现找不到include的文件等如下问题:
#include errors detected ... cannot open source file "iostream #1041
Namespace std has no member cin, cout - Windows #1724最终解决办法都是采用官方提供的配置文件模板 MinGW.md,大家根据自己MinGW实际路径修改即可
-
上一步解决了代码提示问题,接下来按
ctrl+shift+p
,输入Tasks: Configure Task
,弹出窗口中选择 Others (这里我们要用 GCC 来编译),在新打开的tasks.json
中配置如下(其它情况可视具体情况配置):
{ "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "g++", "args": [ "main.cpp", "add.cpp", "sub.cpp", "-o", "main.exe" ], "problemMatcher": [] }, { "label": "build-debug", "type": "shell", "command": "g++", "args": [ "-g", "main.cpp", "add.cpp", "sub.cpp", "-o", "debug.exe" ] } ] }
即我们添加了两个任务,一个是build
,一个是build-debug
编译与执行
-
按
ctrl+shift+p
,输入并选择Tasks: Run Task
,这时会看到出现两个tasks,直接回车选第一个会看到项目文件夹下生成了main.exe: -
在VSCode终端下运行即可得到程序结果:
推荐网址
C++官方调试文档 https://code.visualstudio.com/docs/languages/cpp#_debugging
总的官方调试文档 https://code.visualstudio.com/docs/editor/debugging
Visual Studio Code官方资源
编辑C++文件: http://code.visualstudio.com/docs/languages/cpp
写VS Code扩展插件:https://code.visualstudio.com/docs/extensions/example-hello-world
版权声明:本文为CSDN博主「孙悟空CN」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lidong_12664196/article/details/68928136
博主「码上看世界」:关于vscode使用第三方库
原文链接:https://blog.csdn.net/qq_34347375/article/details/84820370
版权声明:本文为CSDN博主「Chiva Chen」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/q932104843/article/details/51924900