栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

基于VSCode和CMake实现C++开发——Linux篇

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于VSCode和CMake实现C++开发——Linux篇

第一讲:Linux系统介绍 1.1指令与选项
  • 指令格式
    • 命令(空格)【选项】(空格)【操作对象】
    • 选项和操作对象都可以没有,也可以是多个
1.2重要指令讲解
  • pwd:打印当前终端所在的目录
  • ls:列出当前工作目录下的所有文件/文件夹名称
    • ls
    • ls 【路径】:列出指定路径下的
    • ls 【选项】【路径】:列出指定路径下的,并以指定的格式显示
  • cd:切换当前的工作目录
    • cd~/cd
    • cd 【相对路径】
    • cd 【绝对路径】
  • mkdir:创建目录
    • mkdir 路径
    • mkdir -p 路径:一次性创建多层不存在的目录
    • mkdir 路径1 【路径2】 【路径3】:一次性创建多个目录
  • touch:创建新文件
    • touch 【路径】
    • touch 【路径1】 【路径2】
  • rm:删除文件/目录
    • rm 【选项】需要移除的文件路径
    • rm 【选项】需要移除的目录
      • -rf
  • cp:复制文件/文件夹到指定路径
    • cp 【被复制的文件路径】 【文件被复制的路径】
    • cp -r 【被复制的文件路径】 【文件被复制的路径】
      • -r:递归复制
  • mv:移动文件到新位置,或重命名文件
  • man:查看命令使用手册
  • reboot:重启Linux系统
  • shutdown:关机
1.3文件编辑
  • Vim
    • 输出:按住“i”
    • 保存:Esc+Shift+“w”
    • 退出:Esc+Shift+“q”
  • gedit
  • nano
    • 输入:ctrl+O
    • 退出:ctrl+X 
第二讲:GCC编译器

VSCode是通过调用GCC编译器来实现C++的编译工作的

使用g++指令来编译C++代码

2.1编译过程
  • 传统操作
    • 1预处理——生成.i文件
      • g++ -E test.cpp -o test.i
    • 2编译——生成.s文件
      • g++ -S test.i -o test.s
    • 3汇编——生成.o文件
      • g++ -c test.s -o test.o
    • 4 链接——生成bin文件
      • g++ test.o -o test
  • 一步到位操作
    • g++ test.cpp -o test
2.2g++重要编译参数
  • -g:编译待调试信息的可执行文件
  • -O:优化源代码
    • -O2:优化源代码,并输出可执行文件
    • time:查看文件的运行时间
  • -l/-L:指定库文件/库文件路径
    • l:用来指定程序要链接的库,-l紧接着就是库名
    • L:指定库文件所在目录,-L紧接着是库文件的目录名 
  • -I(大写i):指定头文件搜索目录
  • -Wall:打印警告信息
  • -w:关闭警告信息
  • -std=c++11:设置编译标准
  • -o:指定输出文件名
  • -D:定义宏
2.3实战:g++命令行编译

2.3.1直接编译

  • 简单编译并运行
    • g++ main.cpp src/swap.cpp -Iinclude
      
      ./a.out
  • 增加参数编译并运行
    • g++ main.cpp src/swap.cc -Iinclude -std=c++11 -O2 -Wall -o b.out
      
      ./b.out

2.3.2生成库文件并编译

  • 链接静态库生成可执行文件
    • //进入目录
      cd src
      //汇编,生成swap.o文件
      g++ swap.cpp -c -I../include
      //生成静态库libswap.a
      ar rs libswap.a swap.o
      //回到上级目录
      cd ..
      //链接,生成可执行文件
      g++ main.cpp -Iinclude -Lsrc -lswap -o staticmain
      //执行可执行文件
      ./staticmain
  • 链接动态库生成可执行文件
    • //进入目录
      cd src
      //生成动态库
      g++ swaop.cpp -I../include -fPIC -shared -o libswap.so
      //回到上级目录
      cd ..
      //链接,生成可执行文件
      g++ main.cpp -Iinclude -Lsrc -lswap -o sharemain
      //执行可执行文件
      LD_LIBRARY_PATH=src ./sharemain

动态库与静态库的区别

  • 所生成的可执行文件并不在一个目录下
第三讲:GDB调试器

VSCode是通过调用GDB调试器来实现C++的调试工作

GDB的功能

  • 设置断点
  • 使程序在指定的代码行上暂停执行
  • 单步执行程序
3.1常用调试命令参数

 Tips:

  • 编译程序时需要加上-g,之后才能用gdb调试
  • 回车键:重复上一命令 
3.2实战:命令行调试
  • gdb+可执行文件名:进入gdb调试工具
  • 输入各种常用命令
    • run
    • break +num行:添加断点
  • 退出:quit
第四讲:IDE-VSCode 4.1插件安装
  • C/C++
  • CMake
  • CMake Tools
4.2快捷键 4.3实战两个小项目
  • 项目1:打印hello world
    • 编写步骤
      • 在终端中打开VSCode
      • 新建文件夹、文件
      • 编写代码
      • 用g++进行代码调试
  • 项目2:交换两个数(以类的形式)
    • 两个文件夹、三个文件
    • include——swap.h
      • #pragma once
        #include
        
        class swap
        {
        public:
            swap(int a,int b)
            {
                this->_a=a;
                this->_b=b;
        
            }
            void run();
            void printInfo();
        
        private:
            int _a;
            int _b;
        
        
        };

    • src——swap.capp 
      • #include"swap.h"
        
        void swap::run()
        {
            int temp;
            temp = _a;
            _a = _b;
            _b = temp; 
        
        }
        
        void swap::printInfo()
        {
            std::cout<<"_a =  "<<_a <
        int main(int argc, char **argv)
        {
            swap myswap(10, 20);
            std::cout << "Before swap: " << std::endl;
        
            myswap.printInfo();
            myswap.run();
        
            std::cout << "After swap: " << std::endl;
            myswap.printInfo();
        
            return 0;
        }

    • 进行调试
      g++ main.cpp src/swap.cpp -Iinclude -o main

     第五章 CMake 5.1Cross-platform 5.2语法特性介绍
    • 基本语法格式:指令(参数1 参数2 ....)
      • 参数使用括弧括起
      • 参数之间使用空格或分号
    • 指令是大小写无关,参数和变量是大小写相关的
    • 变量使用${}方式取值,但在IF控制语句中是直接使用变量名
    5.3重要指令和CMake常用变量

    重要指令

    • cmake_minimum_required:指定CMake的最小版本要求
    • project:定义工程名称
    • set:显式的定义变量
    • include_directories:向工程添加多个特定的头文件搜索路径
      • 相当于g++编译器的-I
    • link_directories:向工程添加多个特定的库文件搜索路径
      • 相当于g++编译器的-L
    • add_library:生成库文件
    • add_compile_options:添加编译参数
    • add_executable:生成可执行文件
    • target_link_libraries:为target添加需要链接的共享库
      • 相当于g++编译器的-I
    • add_subdirectory:向当前工程添加存放源文件的子目录
    • aux_source_directory:发现一个目录下的所有源代码文件并将列表存储在一个变量中

    CMake常用变量

    • CMAKE_C_FLAGS:gcc编译选项
    • CMAKE_CXX_FLAGS:g++编译选项
    • CMKAE_BUILD_TYPE:编译类型
    5.4CMake编译工程

    5.4.1编译流程

    • 手动编写CMakelists.txt
    • 执行命令cmake PATH 生成Makefile
    • 执行命令make 进行编译

    5.4.2两种构建方式

    • 内部构建:在同级目录下产生一大堆中间文件
      //在当前目录下,编译本目录的CMakelists.txt. 生成Makefile和其他文件
      cmake .
      //执行make命令,生成target
      make
    • 外部构建:将编译输出文件与源文件放到不同目录下
      //在当前目录下,创建build文件夹
      mkdir build
      //进入到build文件夹
      cd build
      //编译上级目录的CMakelists.txt. 生成Makefile和其他文件
      cmake ..
      //执行make命令,生成target
      make
    5.5实战CMake

    项目1:输出hello world

    • 创建CMakelists.txt文件
    • 在CMakelists.txt中输入相应的指令
      cmake_minimum_required(VERSION 3.0)
      
      project(HELLO)
      
      add_executable(hello_cmake main.cpp)
    • 在终端中进行调试(一般使用外部构建)
      mkdir build
      
      cd build
      
      cmake ..
      
      make

    项目2:交换swap(多级目录)

    区别:CMakelists.txt中的命令 

    cmake_minimum_required(VERSION 3.0)
    
    project(SWAP)
    
    include_directories(include)
    
    add_executable(SWAP_CMAKE main.cpp)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008628.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号