从VSCode转到Clion,再到Xcode,再到VSCode,我可太难了。。。
基于g++命令
单文件编译
在写好代码之后,找到VSCode的菜单栏的终端,新建一个终端,之后我们就可以在终端中对所编写的代码进行编译操作了:
可以看到g++编译之后会生成一个a.exe文件,这里生成的a.exe文件是不包含调试信息的。并且我们可以将其命名为别的名字。通过参数控制。g++编译单文件,生成带调试信息的可执行文件、并调式:
g++ -g .\main.cpp -o my_swap • 1
- g参数代表生成带调试信息的可执行文件,- o表示指定输出文件名。只有生成的是带调试信息的可执行文件,才可以被调试。
如果需要调试代码,需要去选择创建launch.json文件。步骤如下:1. 选中最左侧的运行和调试按钮。2. 点击create a launch.json file。3. 选择C++(GDB/LLDB) (因为我们选择gcc软件里面的gdb调试工具)。4. 选择g++.exe-生成和调试活动文件。
之后就会生成launch.json文件,并进入调试。并且会给你生成一个与main.cpp同名的main.exe文件,也就是说编译器帮助我们做了很多事情。
在launch.json文件中,最为关键的两条信息就是"program":和"preLaunchTask"::
"program":代表的是需要调试的可执行文件。想要对一个可执行文件进行调试,首先需要去生成这个可执行文件。"preLaunchTask":表示的是调试之前需要做的工作,其实就是要去生成调试需要的可执行文件。这个生成文件的配置工作在tasks.json文件中:
多文件编译
把swap函数放到一个头文件中声明,和一个.cpp文件中去实现。
g++编译多文件,生成带调试信息的可执行文件、并调试:
g++ -g .\main.cpp .\swap.cpp -o my_multi_swap • 1
此时如果和单个文件一样,去调试的话,就会报错:preLaunchTask"C/C+ +: g+ +.exe生成活动文件"已终止,退出代码为-1.
这是因为,想要调试多个文件,我们需要自己去配置launch.json文件和tasks.json文件。因为我们已近生成了my_multi_swap.exe文件,所以我们直接配置"program":所指定的路径即可:
此时就能进入调试了。
在配置单个文件的时候,VSCode都帮助我们做了生成可调试文件的工作。如果是需要编译多个文件我们需要使用g++手动编译一下,生成我们所需要的exe文件,然后修改launch.json文件,将生成的exe文件路径添加进来。
基于cmake
cmake是一款非常好的工具,它可以帮助我们生成makefile,makefile是什么呢?如果我们需要编译一个大型的工程的话,它会帮助我们指定编译规则,但是它的makefile书写起来非常地困难。所以cmake这个工具就产生了,它能够帮助我们生成极为复杂的makefile。
如果想要将我们的工程构建为cmake工程的话,我们需要在文件主目录里面创建CMakeLists.txt
编写最简单的CMakeLists.txt(安装cmake插件后会有智能提示):
project(MYSWAP) add_executable(my_cmake_swap main.cpp swap.cpp)
MYSWAP是工程名字,add_executable有两个参数,my_cmake_swap表示生成的可执行文件的名字,通过main.cpp swap.cpp这两个文件生成。ctrl shit p进入配置,输入cmake,选择下图中的第一个CMake:Configure,之后在选择GCC后面接自己的版本号的那一个即可:
点击完之后会生成一个build文件夹,是cmake进行外部构建的一个build文件夹。
想要通过CMakeLists.txt生成可执行文件,我们需要在终端中输入一些指令。我们需要进入刚刚生成的build文件夹下,输入cmake ..
看到上述红色方框中出现的显示,说明说有的步骤都是正常的。之后需要输入make命令,但是windows下的make和linux下的make名字可能不一样:
building是把两个cpp编译成二进制文件,linking是把exe连接起来。
想要拿到刚刚生成的文件进行调试的话,我们同样需要去配置launch.json文件即可:
更多参考:
mkdir build
cd build
如果电脑上已经安装了vs,可能会调用微软MSVC编译器,使用(cmake -G “MinGW Makefiles” …)代替cmake …即可
仅第一次使用cmake时使用(cmake -G “MinGw Makefiles” …) 后面可使用(cmake …)
cmake …
ming32-make.exe // 或者是make
配置json
launch.json
- launch.json : for debug
代码改动之后,我们需要重新生成可执行文件,然后调试,但是我们如果一直在终端里面去生成可执行文件的话,效率就太低了。因为代码改动一次,就需要去重新生成一次可执行文件。因此我们需要将preLaunchTask打开(删除注释//),并配置其相关信息:
ctrl shift p,输入task,选择config task可以进行模板创建:
或者选中代码区域,右键去生成和调试活动文件。
tasks.json
- tasks.json : for build before debug
g++编译方式配置tasks.json:
command的含义就是g++,之后带两个文件的参数,然后是输出文件的路径,直接给绝对路径是最保险的:
或者使用相对路径:
附上launch.json
{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "g++.exe - 生成和调试活动文件", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/out.exe", "args": [], "stopAtEntry": false, "cwd": "D:\\install_hezhiqiang\\MinGW\\bin", "environment": [], "externalConsole": true, // "console": "externalTerminal", "MIMode": "gdb", "miDebuggerPath": "D:\\install_hezhiqiang\\MinGW\\bin\\gdb.exe", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "C/C++: g++.exe 生成活动文件" } ] }
附上tasks.json:
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe 生成活动文件", "command": "D:\\install_hezhiqiang\\MinGW\\bin\\g++.exe", "args": [ "-g", "${workspaceFolder}\\main.cpp", "${workspaceFolder}\\swap.cpp", "-o", "${workspaceFolder}\\out.exe" ], "options": { "cwd": "D:\\install_hezhiqiang\\MinGW\\bin" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "调试器生成的任务。" } ], "version": "2.0.0" }
cmake方式配置tasks.json:
如果是cmake工程的话,想用task.json执行cmake的编译命令呢?task.json可以帮助我们去完成调试之前的编译工作,将其编译命令对应到task.json里面如下:
附上launch.json
{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "g++.exe - 生成和调试活动文件", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/my_cmake_swap.exe", "args": [], "stopAtEntry": false, "cwd": "D:\\install_hezhiqiang\\MinGW\\bin", "environment": [], "externalConsole": true, // "console": "externalTerminal", "MIMode": "gdb", "miDebuggerPath": "D:\\install_hezhiqiang\\MinGW\\bin\\gdb.exe", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "Build" } ] }
这里要注意"program": "${workspaceFolder}/build/my_cmake_swap.exe"是
附上tasks.json:
{ "version": "2.0.0", "options": { "cwd": "${workspaceFolder}/build" }, "tasks": [ { "type": "shell", "label": "cmake", "command": "cmake", "args": [ ".." ] }, { "label": "make", "group":{ "kind": "build", "isDefault": true }, "command": "make", "args": [ ] }, { "label": "Build", "dependsOn":[ "cmake", "make" ] } ] }
最后推荐大家使用cmake方式构建工程。


















