0 引言

转入linux/VSCode编程之后,迫切了解到有必有较为系统地学习一下VSCode中相关配置文件的写法。下面将分为 linux/g++编译指令、.json文件关键词/替换变量的意义、编译链接过程原理分析几个部分进行介绍,并以opencv为例,将上述知识综合运用。

1 linux/g++编译指令介绍

参照BattleScars的博客,摘取其中对本文有用的部分进行运用,博客链接如下,质量非常之高,表示感谢!!!

https://www.cnblogs.com/battlescars/p/cpp_linux_gcc.html

(1)针对一个完整的、单一的.cpp文件,helloworld.cpp,其编译指令如下。

$ g++ helloworld.cpp

编译器 g++ 通过检查命令行中指定的文件的后缀名可识别其为 C++ 源代码文件。编译器默认的动作:编译源代码文件生成对象文件(object file),链接对象文件和c++ 库中的函数得到可执行程序。然后删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序的运行方式如下,

$ ./a.out 

如果要指定可执行程序的文件名,使用 "-o"参数,如下,

$ g++ -std=c++11 helloworld.cpp -o helloworld

暂时了解到这里就可以了,在编译多个源文件生成可执行程序时,可参照上述博客内容。

(2)g++相关参数的意义

  参考了此贴,表达感谢!

https://blog.csdn.net/lin_008/article/details/77600483

  1  g++ -I[path](大写的i,即include path) 编译程序按照指定的路径去搜索头文件,指定的路径为第一个去寻找的路径,eg

g++ -I/usr/include

  2  g++ -L[lib](大写的L)  编译程序按照-L指定的路径进去寻找文件,一般的在-L的后面可以一次用-l指定多个库文件 ,eg

g++ -L/usr/lib/x86_64-linux-gnu

  3 g++ -l  [掐头去尾的库名](小写L) 编译程序到系统默认路径寻找库文件,库文件的格式如下。

g++ -lz     #库文件的名称为libz.so,库名为z

  如果找不到,那么到当前目录下找;如果还找不到,那么到LD_LIBRARY_PATH等环境变量置顶的路径中去查找;如果仍然找不到,那么编译程序提示找不到库。

2 .json文件参数的意义

VSCode采用.json结尾的文件作为配置文件,包含关键词和相关参数两个部分。以本人编写的opencv中的参数文件为例进行解释,如下。

(1)launch.json

参考了VSCode官网上的两个帖子,链接如下。

https://code.visualstudio.com/docs/languages/cpp                                  # c++编程环境配置
https://code.visualstudio.com/docs/editor/debugging#_launch-configurations #详细解释了launch.json中的参数的含义

为了能够debugging,需要生成一个launch.json文件,Linux下VSCode支持的的调试器为GDB,配置时点击configure按钮并选择 c++(GDB/LLDB),即可创建一个launch.json文件.

其中,preLauchTask可将launch.json和tasks.json文件关联起来,用于在调试前完成build任务。

{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 强制:就一个名字而已,但是是必须要有的
"type": "cppdbg", // 强制:调试器的类型,Node debugger for node, php for PHP , go for GO
"request": "launch", // 强制:launch/attach
"program": "${workspaceFolder}/${fileBasenameNoExtension}.out", // 可执行文件的路径
"miDebuggerPath": "/usr/bin/gdb", // 调试器的位置
"preLaunchTask":"build", // 调试前编译任务名称
"args": [], // 调试参数
"stopAtEntry": false,
"cwd": "${workspaceFolder}", // 当前工作目录
"environment": [], // 当前项目环境变量
"externalConsole": true,
"MIMode": "gdb", // 调试器模式/类型
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

(2)tasks.json

参考了VSCode的两个文档,链接如下。

https://code.visualstudio.com/docs/languages/cpp            # c++配置环境中的例子
https://code.visualstudio.com/docs/editor/tasks#vscode # 专门介绍tasks.json的

想从VSCode中构建应用程序,必须要生成一个tasks.json文件。生成时,需要指定编译器为"g++",并在args[]中编写 g++编译指令.

{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks":[ // 可以有多个任务
{
"label": "build", // 编译任务名
"type": "shell", // 编译任务的类型,通常为shell/process类型
"command": "g++", // 编译命令
"args":[
"-g", // 该参数使编译器在编译的时候产生调试信息
"${workspaceFolder}/${fileBasename}", // 被编译文件,通常为.cpp/.c/.cc文件等
"-I", // include path指令
"/usr/include",
"-L", // lib路径
"/usr/lib/x86_64-linux-gnu",
"-l", // 链接库文件1
"opencv_core",
"-l", // 链接库文件2
"opencv_highgui",
"-o", // 生成指定名称的可执行文件
"${workspaceFolder}/${fileBasenameNoExtension}.out"
          /* -g hello.cpp -I/usr/include -L/usr/lib/x86_64-linux-gnu -lopencv_core -o hello.out */
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "cmakebuild",
"type": "shell",
"command": "cd build && cmake ../ && make", // shell 编译命令,做并运算,即前一命令执行失败,则后一命令也不执行
"args": []
}
] }

(3)预定义变量的意义解释

参考了该贴,表示感谢。

https://blog.csdn.net/bat67/article/details/78302871?locationNum=4&fps=1
${workspaceFolder} :表示当前workspace文件夹路径,如C:\Users\admin\Desktop\test
${workspaceRootFolderName}:表示workspace的文件夹名,如test
${file}:文件自身的绝对路径,如C:\Users\admin\Desktop\test\.vscode\launch.json
${relativeFile}:文件在workspace中的路径,如.vscode\launch.json
${fileBasenameNoExtension}:当前文件的文件名,不带后缀,如hello/launch
${fileBasename}:当前文件的文件名,如 hello.cpp/launch.json等
${fileDirname}:文件所在的文件夹路径,也即C:\Users\admin\Desktop\test\.vscode
${fileExtname}:当前文件的后缀,也即.json
${lineNumber}:当前文件光标所在的行号
${env:PATH}:系统中的环境变量

40 VSCode下.json文件的编写——(1) linux/g++ (2).json中参数与预定义变量的意义解释的更多相关文章

  1. python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分

    一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行js ...

  2. 【微信】微信小程序 微信开发工具中新创建的json文件,编译报错VM1781:2 pages/module/module.json 文件解析错误 SyntaxError: Unexpected end of JSON input

    如果新创建报错:编译报错VM1781:2 pages/module/module.json 文件解析错误  SyntaxError: Unexpected end of JSON input 解决方法 ...

  3. 单目录下多文件 makefile编写

    makefile很久就接触过了,但是一直没怎么深入的去学习和总结:在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有:知识在于沉淀,这句说的非常好,所以现在把自己理解的东 ...

  4. 多目录下多文件 makefile编写

    前面已经分享了单目录项下多文件的makefile的编写,现在来看看多目录下多文件makefile的编写: 在做项目时,一般文件都会分几个目录来存放:基本的是  include/  bin/ src/ ...

  5. python中读取json文件报错,TypeError:the Json object must be str, bytes or bytearray,not ‘TextIOWrapper’

    利用python中的json读取json文件时,因为错误使用了相应的方法导致报错:TypeError:the Json object must be str, bytes or bytearray,n ...

  6. Myeclipse中文件已经上传到server文件夹下,文件也没有被占用,可是页面中无法读取和使用问题的解决方法

    这个问题是因为Myeclipse中文件不同步引起的.在Myeclipse中,project文件是由Myeclipse自己主动扫描加入的,假设在外部改动了project文件夹中的文件但又关闭了自己主动刷 ...

  7. RPC框架下实现文件上传到linux服务器

    一.前端使用element -ui 的upload组件 :data 表示额外传递的参数, :header 表示设置请求头参数,如,token等, action表示后台api接口的地址 二. conto ...

  8. 将windows下的文件上传到Linux服务器上

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lx_Frolf/article/deta ...

  9. python复制多层目录下的文件至其他盘符对应的目录中

    一.需求 app打包需要打入一些H5进去,以便更快的加载页面.这些H5文件是散落在各个文件夹中的[如下列所示],偶尔各个文件夹还需新增文件,每次新增一个文件,需要改动jenkins上job脚本,比较麻 ...

随机推荐

  1. python_django_admin

    admin 是Django提供的基于web的管理工具,是系统管理员用于数据的输入,删除和查询的管理工具. 超级管理员在settings中的集成:INSTALLED_APPS=['django.cont ...

  2. Linux服务器查看PHP是否支持mail()函数方法

    PHP的Mail函数可以用来发送邮件,如查看Linux服务器PHP是否支持Mail函数? PHP查看是否支持Mail函数的方法 Linux系统下的服务器,查看PHP是否支持Mail函数的方法有很多种: ...

  3. java随笔记录

    JAVA的变量类型 类变量:独立于方法之外的变量,用 static 修饰. 实例变量:独立于方法之外的变量,不过没有 static 修饰. 局部变量:类的方法中的变量. public class Va ...

  4. 利用Python批量重命名一系列文件名杂乱的文件

    假设目录下面有这样一系列命令杂乱的文件: OPENFOAM -TRAINING- PART- #1.pdf OPENFOAM - TRAINING- PART- #2.pdf OPENFOAM- TR ...

  5. react-devtools超级简单安装教程

    有时候看网上各路大神,写如何安装react-devtools,大神就是大神,好多步骤一笔带过,导致一些学习者看的一脸懵逼,今天我给大家讲超级简单的react-devtools安装步骤,相信看过的小伙伴 ...

  6. 使用 @Log4j2 log.error() 打印异常日志

    public static void main(String[] args) { int a = 10; try { int i = 1/0; } catch (Exception e) { Syst ...

  7. go结构体上的函数

    go结构体上的函数 我们可以将一个方法和一个结构体关联: type Saiyan struct { Name string Power int } func (s *Saiyan) Super() { ...

  8. composer安装后台模板

    先下载composer的windows安装包 cmd切换到源代码所在目录 https://www.cnblogs.com/wgphp/p/8001434.html 安装过程可以参照这篇文章 一点问题是 ...

  9. 基于mybatis-plus的代码生成

    基于mybatis-plus的代码生成 前言 随着敏捷开发模式的推广,伴着日益增长的需求,日常工作中我们越来越注重效率和便捷性.今天我们就来探讨下如何自动生成代码,准确地说是如何依赖数据库生成我们的e ...

  10. Java-Class-E:org.springframework.http.HttpStatus

    ylbtech-Java-Class-E:org.springframework.http.HttpStatus 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部 1. /* * C ...