基于vscode的c++开发(Windows)

这篇具有很好参考价值的文章主要介绍了基于vscode的c++开发(Windows)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发环境搭建

安装VScode和GCC编译器。

项目文件夹

一般一个项目中应该包含
include文件夹——用于保存头文件
src文件夹——用于保存源文件

GCC编译器

GCC编译器支持编译go、c、c++等语言。vscode就是通过调用GCC编译器来实现c/c++的编译工作的。
在使用过程中,
使用gcc指令编译c代码;
使用g++指令编译c++代码。

编译过程

1.预处理
在此阶段编译器会处理以“#”开头的预处理指令,如#include、#define 等;
处理后的文件通常会将头文件的内容替换到 #include 指令所在的位置,并且会展开 #define 宏定义。

# -E 选项指示编译器仅对输入文件进行预处理
g++  -E  test.cpp  -o  test.i    //.i文件

2.编译
在这个阶段,预处理后的源代码被翻译成汇编代码

# -S 编译选项告诉 g++ 在为 C++ 代码产生了汇编语言文件后停止编译
#  g++ 产生的汇编语言文件的缺省扩展名是 .s 
g++  -S  test.i  -o   test.s

3.汇编
汇编器将汇编代码转换为二进制目标文件,汇编器将汇编代码转换为机器指令,并生成目标文件,目标文件中包含了机器指令、符号表、重定位信息和其他元数据。

# -c 选项告诉 g++ 仅把源代码编译为机器语言的目标代码
# 缺省时 g++ 建立的目标代码文件有一个 .o 的扩展名。
g++  -c  test.s  -o  test.o

4.链接
将所有的目标文件以及可能的库文件链接在一起形成最终的可执行文件。链接器将各个目标文件中的符号引用解析为实际的内存地址,并且将程序所需要的库文件链接到最终的可执行文件中。

# -o 编译选项来为将产生的可执行文件用指定输出路径与文件名
g++  test.o  -o  test

g++的重要编译参数

  1. -g 编译带调试信息的可执行文件
# -g 选项告诉 GCC 产生能被 GNU 调试器GDB使用的调试信息,以调试程序。
# 产生带调试信息的可执行文件test
 g++ -g test.cpp
  1. -O[n] 优化源代码
    -O2 较常使用。
## 所谓优化,例如省略掉代码中从未使用过的变量、直接将常量表达式用结果值代替等等,这些操作
会缩减目标文件所包含的代码量,提高最终生成的可执行文件的运行效率。
# -O 选项告诉 g++ 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。 -O2 
选项告诉 g++ 产生尽可能小和尽可能快的代码。 如-O2,-O3,-On(n 常为03)
# -O 同时减小代码的长度和执行时间,其效果等价于-O1
 # -O0 表示不做优化
# -O1 为默认优化
# -O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
# -O3 则包括循环展开和其他一些与处理特性相关的优化工作。
# 选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快。
# 使用 -O2优化源代码,并输出可执行文件
g++ -O2 test.cpp
  1. -l|-L 指定库文件|库文件路径
 # -l参数(小写)就是用来指定程序要链接的库,-l参数紧接着就是库名
# 在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接 LINUX系统下的
# 链接glog库
g++ -lglog test.cpp
 # 如果库文件没放在上面三个目录里,需要使用-L参数(大写)指定库文件所在目录
# -L参数跟着的是库文件所在的目录名
# 链接mytest库,libmytest.so在/home/bing/mytestlibfolder目录下
g++ -L/home/bing/mytestlibfolder -lmytest test.cpp
  1. -I 指定头文件搜索目录
# -I 
# /usr/include目录一般是不用指定的,gcc知道去那里找,但 是如果头文件不在/usr/icnclude
里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上
I/myinclude 参数了,如果不加你会得到一个”xxxx.h: No such file or directory”的错
误。-I参数可以用相对路径,比如头文件在当前 目录,可以用-I.来指定。上面我们提到的–cflags参
数就是用来生成-I参数的。
g++ -I/myinclude test.cpp
  1. -Wall 打印警告信息
# 打印出gcc提供的警告信息
g++ -Wall test.cpp
  1. -std=c++11 设置编译编译标准
 # 使用 c++11 标准编译 test.cpp
 g++ -std=c++11 test.cpp
  1. -o 指定输出文件路径与文件名
# 指定即将产生的文件名
# 指定输出可执行文件名为test
 g++ test.cpp -o test

CMake

cmake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的编译过程。

语法特性

基本语法格式:指令(参数1 参数2……)
参数使用括号括起来;
参数之间使用空格或者分号分开;
指令是大小写无关的,参数和变量是大小写相关的

 set(HELLO hello.cpp)
 add_executable(hello main.cpp hello.cpp)
 ADD_EXECUTABLE(hello main.cpp ${HELLO})

变量使用 ${} 方式取值。

重要指令

cmake_minimum_required - 指定CMake的最低版本要求
语法: cmake_minimum_required(VERSION versionNumber [FATAL_ERROR])

# CMake最小版本要求为2.8.3
 cmake_minimum_required(VERSION 2.8.3)

project - 定义工程名称,并可指定工程支持的语言
语法: : project(projectname [CXX] [C] [Java])

# 指定工程名为HELLOWORLD
 project(HELLOWORLD)

**set - 显式的定义变量
语法:set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])

# 定义SRC变量,其值为sayhello.cpp hello.cpp
 set(SRC sayhello.cpp hello.cpp)

include_directories - 向工程添加多个特定的头文件搜索路径 —>相当于指定g++编译器的-I参数
语法: include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 …)

# 将/usr/include/myincludefolder 和 ./include 添加到头文件搜索路径
include_directories(/usr/include/myincludefolder ./include)

add_compile_options - 添加编译参数
语法:add_compile_options()

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

link_directories - 向工程添加多个特定的库文件搜索路径 —>相当于指定g++编译器的-L参数
语法: link_directories(dir1 dir2 …)

# 将/usr/lib/mylibfolder 和 ./lib 添加到库文件搜索路径
link_directories(/usr/lib/mylibfolder ./lib)

add_library - 生成库文件
语法: add_library(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL]
source1 source2 … sourceN)

# 通过变量 SRC 生成 libhello.so 共享库
add_library(hello SHARED ${SRC})

add_executable - 生成可执行文件
语法:add_executable(exename source1 source2 … sourceN)

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

target_link_libraries - 为 target 添加需要链接的共享库 —>相同于指定g++编译器-l参数
语法: target_link_libraries(target library1<debug | optimized> library2…)

# 将hello动态库文件链接到可执行文件main
 target_link_libraries(main hello)

aux_source_directory - 发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表
语法: aux_source_directory(dir VARIABLE)

 # 定义SRC变量,其值为当前目录下所有的源代码文件
aux_source_directory(. SRC)
 # 编译SRC变量所代表的源代码文件,生成main可执行文件
add_executable(main ${SRC})

add_subdirectory - 向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置
语法: add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

# 添加src子目录,src中需有一个CMakeLists.txt
 add_subdirectory(src)

以下为一个CMakeLists.txt的基本模板

# 指定最低版本
cmake_minimum_required(VERSION 3.0)

# 设定工程名称
project(MYPROJECT)

# 设定编译参数
add_compile_options(-Wall -std=c++11 -g -O2)

# 设定所有源码列表,设定该指令可以简化add_execuable()指令的编写
aux_source_directory(./src SRC_DIR)

# 包含头文件路径 include_directories("路径1" "路径1" ……) → g++ -I./***
include_directories(./include)

# 设定链接库路径,一般用于链接第三方库 link_directories("路径1"  “路径2”...) → g++ -L./***
link_directories(../lib)

# 生成动态/静态链接库  add_library(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL]
# add_library(动/静链接库名称 [STATIC/SHARED](可选参数默认为STATIC) source1 source2 source3……)
add_library()

# 生成可执行文件 add_executable(exename source1 source2 ... sourceN)
add_executable(mywsap main.cpp ${SRC_DIR})

# 为target添加需要链接的第三方库、共享库 → g++ -l target_link_libraries(target library1<debug | optimized> library2...)
target_link_libraries()

CMake编译工程

CMake目录结构:项目主目录存在一个CMakeLists.txt文件
两种方式设置编译规则:

  1. 在包含源文件的子文件夹中还包含CMakeLists.txt文件,主目录的CMakeLists.txt通过
    add_subdirectory(subdir1)
    add_subdirectory(subdir2)
    添加子目录即可
    这种编译规则适用于项目较大结构复杂的情况,当项目包含多个模块或者子系统,每个模块的编译规则较为复杂时,可以使用这种编译规则。这样可以将项目按模块分解,每个模块有自己独立的 CMakeLists.txt 文件,使得项目结构更加清晰。
  2. 在包含源文件的子文件夹中未包含CMakeLists.txt文件,子目录编译规则体现在主目录的CMakeLists.txt中;
    这种编译规则适用于项目结构相对简单,项目所包含的模块数量较少,直接在主目录的 CMakeLists.txt 文件中定义所有的编译规则,简化项目的管理与维护。

编译流程

  1. 在Windows系统下使用CMake构建C/C++工程的流程
    • 手动编写CMakeLists.txt文件,定义编译规则。
    • 执行命令cmake PATH 生成Makefile文件(PATH是主目录CMakeList.txt所在的目录。) 如果你的电脑安装了vs,那么此过程可能会调用微软的MSVC编译器,此时便需要使用cmake -G ”MinGw Makefiles" PATH 来指定编译器。
    • 执行 mingw32-make.exe 命令进行编译。
  2. 在Linux系统下使用CMakeLists.txt构建C/C++工程的流程
    • 手动编写CMakeLists.txt文件,定义编译规则。
    • 执行命令cmake PATH 生成Makefile文件(PATH是主目录CMakeList.txt所在的目录。)
    • 执行 make 命令 进行编译。

构建方式

  1. 内部构件
    内部构建会在同级目录下产生一大堆的中间文件,这些中间文件不是我们最终所需要的,和工程源文件放在一起会显得杂乱无章。不推荐使用
## 内部构建
# 在当前目录下,编译本目录的CMakeLists.txt,生成Makefile和其他文件
cmake .
 # 执行make命令,生成target
 mingw32-make.exe
  1. 外部构建
    将编译输出文件与源文件放到不同目录中
## 外部构建
# 1. 在当前目录下,创建build文件夹
mkdir build 
# 2. 进入到build文件夹
cd build
 # 3. 编译上级目录的CMakeLists.txt,生成Makefile和其他文件
cmake [-G "MinGW Makefiles"] ..
 # 4. 执行make命令,生成target
 mingw32-make.exe

参考链接

添加链接描述文章来源地址https://www.toymoban.com/news/detail-860848.html

到了这里,关于基于vscode的c++开发(Windows)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows vscode jsoncpp cmake c++ 构建项目

    jsoncpp的编译和使用推荐文章: jsoncpp的编译和使用 | 爱编程的大丙 (subingwen.cn) https://www.subingwen.cn/cpp/jsoncpp/ 从这个链接下载jsoncpp-master:https://github.com/open-source-parsers/jsoncpp 可以把这个文件夹名字改成jsoncpp,改短点 (●\\\'◡\\\'●),路径为D:/jsoncpp 下载 cmake 工具:我下载的是3.28.1版

    2024年01月20日
    浏览(51)
  • windows + ubuntu + vscode开发环境配置安装

            如果安装了windows子系统的朋友,可以选择继续使用。或者提前卸载WSL,再选择安装虚拟机。虚拟机占用内存较大,WSL可能对于开发的一些需求还有欠缺。根据自己的实际情况进行选择。         WIN10/11安装WSL(请参考官方资料,很详细):          外部连接审核不通

    2024年02月06日
    浏览(58)
  • vscode运行c++结果输出在windows终端的两种方法

    打开.vscode中launch.json文件 修改下面三个配置 \\\"program\\\":\\\"C:\\\\Windows\\\\System32\\\\cmd.exe\\\", \\\"args\\\": [\\\"/C\\\",\\\"${fileDirname}\\\\${fileBasenameNoExtension}.exe\\\",\\\"\\\",\\\"pause\\\"], \\\"externalConsole\\\": true, 以非调试模式运行,ctrl+F5 打开.vscode中launch.json文件 修改\\\"externalConsole\\\": true, 在main函数中最后加入getchar()函数 注:方法2如

    2024年02月19日
    浏览(41)
  • windows10系统下安装opencv4.7.0+VSCode+(C++)环境搭建

    windows10系统下安装opencv4.7.0+VSCode+(C++)环境搭建 1.VScode最新版 2.Opencv:opencv-4.7.0、opencv_contrib-4.7.0(扩展库,可自选是否安装) 3.MinGW-w64:选择GCCWindows版本 4.c-make工具:最新版,应选择二进制版本 注意 : (1)以上安装包目录文件中不应包含空格空格和其他非法字符,否则后面会

    2023年04月10日
    浏览(58)
  • windows下VScode搭建IDApython脚本开发环境遇到的问题

    IDA pro 7.7 vscode 最新版 python版本 与IDA 自带python 一致 3.8.10 下载 插件仓库的地址:https://github.com/ioncodes/idacode release版本 将插件安装到 IDApath/plugins/ idacode -setting.py 设置如下: 然后vscode里面的python版本和路径需要和 这里设置的保持一致 点击vscode右下角的python配置 安装插件依赖

    2024年02月11日
    浏览(49)
  • 3、windows环境下vscode开发c/c++环境配置(二)

    前言:上一篇文章写了windows环境下,配置vscode的c/c++开发环境,这一篇讲vscode开发c/c++的配置文件,包括c_cpp_propertues.json,task.json及launch.json。 通过c/c++插件我们就可以来编写c/c++程序了,但是这仅仅是可以编辑c/c++程序,将c/c++程序编译成机器可以识别的语言还需要配合mingw或

    2024年02月21日
    浏览(35)
  • windows安装go,以及配置工作区,配置vscode开发环境

    下载安装go 我安装在D:go路径下 配置环境变量 添加GOROOT value为 D:go 修改path 添加 %GOROOT%bin 添加GOPATH value为 %USERPROFILE%go 其中GOPATH 是我们自己开发的工作区,其中包含三个folder bin,pkg,以及src,其中src为我们编写代码的位置 配置vscode开发环境 所搜go并安装扩展 在pkg文件夹下创

    2024年02月12日
    浏览(52)
  • 2、windows环境下vscode开发c/c++环境配置(一)

    前言:VSCode是微软出的一款轻量级编辑器,它本身 只是一款文本编辑器 而已,并 不是一个集成开发环境(IDE) ,几乎所有功能都是以插件扩展的形式所存在的。因此,我们想用它编程,不只是把vscode下载下来就行,还需要 安装对应编程语言的扩展 以及 相应的编译器 。同时

    2024年02月21日
    浏览(35)
  • Windows VsCode 配置 Eigen 库 - C++矩阵计算库的配置 - 手把手教程

    Eigen是一个用来进行矩阵处理的C++库,除了 C++ 标准库之外,Eigen 不需要其他任何依赖项。 官网 https://eigen.tuxfamily.org 直接点击最新版(当前是3.4.0)对应的zip文件下载即可。 解压后文件目录如下: 其中 Eigen 就是存放要Include的头文件的地方。 最好新建一个文件夹专门用来写Ei

    2023年04月08日
    浏览(40)
  • Windows/macOS使用VSCode搭建C/C++的开发/Debug环境

    本文面向的对象是初次接触搭建C语言开发环境的学生或编程爱好者,以及想脱离诸如VC++6.0等过时开发工具从而转用VScode的人群 本文内容较多,篇幅较长,可按照需要选择阅读,文中如有纰漏,欢迎斧正。 我郑重承诺下面会是一篇极为详细的教程: 目录 一、安装并配置VSc

    2024年02月08日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包