c++项目环境搭建(VMware+linux+ubantu+vscode+cmake)

news2024/11/27 2:21:08

想运行一个c++项目,但是环境怎么整呢?b站走起!!!

本文需要的安装包

链接:https://pan.baidu.com/s/1XJbR2F1boQ-CqV8P71UOqw 
提取码:swin

一、在虚拟机中安装ubantu

八分钟完成VMware和ubuntu系统安装_哔哩哔哩_bilibili

按照视频来就行,别直接在计算机上安装linux系统,呜呜呜~~~找到一个博客,我跟着走之后发现硬盘被格式化了,呜呜呜呜~~~~太惨了,我那么大一个数据集全没了。。。。

二、linux命令

pwd  //打印当前目录
ls //输出当前目录下的文件、文件夹的名称
ls -lah [file] //以列表显示
../   //上一级目录
cd //切换当前的工作目录
mkdir //创建目录
mkdir -p [file]  //创建多层不存在的目录
touch //创建文件
rm //删除文件目录
rm -rf //移除目录
cp -r //复制文件/文件夹到指定的位置
mv //移动文件到新的位置,或者重命名文件
man //包含了linux中全部命令手册
reboot  //重启虚拟机
shutdown -h now  //关闭虚拟机
vim //创建文件 i 进入插入模式 esc 退出模式 :w 保存 :q 退出
gedit //进入文件  linux下的纯文本编辑器
nano  //进入文件  小巧的文本编辑器

三、开发环境搭建 

 基于VSCode和CMake实现C/C++开发 | Linux篇_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1fy4y1b7TC/?spm_id_from=333.788.recommend_more_video.0&vd_source=5e970d20c101731870f4d753d2ac710c

好的,开始跟着视频搭建环境。。。以下是我自己记的笔记,建议跟着视频一步一步来。

sudo apt update  //更新,下载安装包之前运行
sudo apt install gcc //下载gcc gdb g++ cmake
g++ --version //查看是否安装成功,显示版本号就是安装成功了
vim test.cpp //创建一个测试文件
g++ test.cpp -o test //编译这个文件
./test //运行
g++ test.cpp -O2 -o test //优化
time ./test // 查看执行时间
rm test // 删除文件

 编译过程

g++ -E test.cpp -o test.i //预处理
g++ -S test.cpp -o test.s //编译
g++ -C test.cpp -o test.o //汇编
g++ test.o -o test //链接

 一个简单的Demo

项目目录如下图所示

swap.cpp

#include "swap.h"
void swap(int &a,int &b){
    int temp;
    temp = a;
    a = b;
    b = temp;
}

main. cpp

#include<iostream>
#include "swap.h"
using namespace std;

int main(int argc,char **argv){
    int val1 = 10;
    int val2 = 20;

    cout << "Before Swap" << endl;
    cout << "val1=" << val1 << endl;
    cout << "val2=" << val2 << endl;
    swap(val1, val2);
    cout << "After Swap" << endl;
    cout << "val1=" << val1 << endl;
    // cout << "val2=" << val2 << endl;
    return 0;
}

 swap.h

void swap(int &a, int &b);

执行语句

g++ main.cpp src/swap.cpp -Iinclude
./a.out

g++ main.cpp src/swap.cpp -Iinclude -Wall -std=c++11 -o b.out
./b.out

一些参数

-l -L //指定库文件|指定库文件路径
-I //指定头文件
-Wall //打印警告信息
-w //关闭警告信息
-std=c++ //设置编译标准
-o //指定输出文件名
-D //定义宏

生成库文件并编译

链接静态库可执行文件

cd src
g++ swap.cpp -c -I../include //汇编
ar rs libswap.a swap.o //生成静态库
cd ..
g++ main.cpp -lswap -Lsrc -Iinclude -o static_main //链接,生成可执行文件

链接动态库可执行文件 

g++ swap.cpp -I../include -fPIC -shared -o libswap.so
cd..
g++ main.cpp -Iinclude -lswap -Lsrc -o dyna_main
LD_LIBRARY_PATH=src ./dyna_main

调试sum.cpp文件

sum.cpp

#include<iostream>
using namespace std;
int main(){
  int N = 100;
  int sum = 0;
  int i = 1;
  while (i <= N){
    sum = sum + i;
    i = i + 1;
  }
  cout << "sum = " << sum << endl;
  cout << "over" << endl;
  return 0;
}
g++ sum.cpp -o a_no_g
g++ -g sum.cpp -o a_yes_g //可调式

ctrl+l //清屏

:set nu //显示文件内行数

ctrl+shift+“+”号 //放大终端

gdb a_yes_g //编译
run  //运行
break 13 //加断点
info breakpoints //查询断点
print i //查看i中的数值
continue //F5
display i //输出i
list //显示断点附近的代码

开始vscode之旅

sudo snap install --classic code //安装vscode
code . //打开vscode
g++ main.cpp src/swap.cpp -Iinclude -o main //编译
./main //运行

课程七讲 | PDF课件
链接:https://pan.baidu.com/s/13K-8zbBIMePIG6cOVhSvHQ
提取码:bing

回复“linux”可获取课程七讲linux篇的源码

回复“windows”可获取windows篇的源码

基于VSCode和CMake进行C/C++开发 | 课程七讲 | 源码下载
链接:https://pan.baidu.com/s/1quqJFgyF4alAQSXaRWGiWg
提取码:bing 

cmake start

//指令是大小写无关的,参数和变量是大小写相关的
set(HELLO hello.cpp)
add_executable(hello main.cpp hello.cpp)
ADD_EXECUTABLE(hello main.cpp ${HELLO})
//变量使用${}方式取值,但是在IF控制语句中是直接使用变量名

重要指令 

# 指定cmake最小版本要求
cmake_minimum_required(VERSION 2.8.3)

# 定义工程名称,并可指定工程支持的语言
project(HELLOWORLD)

# 显示的定义变量
set(SRC sayhello.cpp hello.cpp)

# 向工程添加多个特定的头文件搜索路径
link_directories(/user/lib/mylibfolder ./lib)

# 生成库文件
add_library(hello SHARED ${SRC})

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

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

#为target添加需要链接的共享库
target_link_libraries(main hello)

#向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置
add_subdirectory(src)

# 发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建文件列表
aux_source_directory(. SRC) 
add_executable(main ${SRC})

常用变量 

CMAKE_C_FLAGS   //gcc编译选项
CMAKE_CXX_FLAGS   //g++编译选项
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

CMAKE_BUILD_TYPE  //编译类型(Debug, Release)
set(CMAKE_BUILD_TYPE Debug)

两种构建方式 

内部构建
cmake .

make

外部构建
mkdir build

cd build

cmake ..  //编译上级目录的CMakeLists.txt,生成Makefile和其他文件

make   //执行make命令,生成target

最小CMake工程

cmake_minimum_required(VERSION 3.0)

project(HELLOWORLD)

add_executable(hello_cmake helloworld.cpp)   == g++ helloworld.cpp -o hello

 多目录工程-直接编译

cmake_minimum_required(VERSION 3.0)

project(SOLIDERFIRE)

include_directories(include)


add_executable(main_cmake main.cpp src/Gun.cpp src/Solider.cpp)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/538326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git命令大全,涵盖Git全部分类,非常值得收藏!

Git是一个分布式版本控制系统&#xff0c;可以让开发者在不同的平台和环境中协作开发项目。Git有很多命令&#xff0c;可以用来管理项目的状态、历史、分支、合并、冲突等。本文将介绍一些Git常用的命令&#xff0c;并给出示例和分类。 配置命令 配置命令可以用来设置Git的全局…

算法设计与分析:贪心法

目录 第一关&#xff1a;贪心法 任务描述&#xff1a; 相关知识&#xff1a; 贪心法的优缺点&#xff1a; 例题&#xff1a; 解题分析&#xff1a; 程序实现&#xff1a; 关键代码&#xff1a; 编程要求&#xff1a; 测试说明&#xff1a; 第二关&#xff1a;最小生成…

体验了下科大讯飞版ChatGPT,厉害了!

前几天科大讯飞的星火认知大模型发布了&#xff0c;我刚好有朋友在科大讯飞工作&#xff0c;于是就第一时间体验了一波。 一番体验下来确实比我预想的效果要好&#xff0c;没想到国产模型的效果还不错&#xff0c;我试了很多方面&#xff0c;比如通用常识功能、写作功能、学习…

【论文阅读】基于鲁棒强化学习的无人机能量采集可重构智能表面

只做学习记录&#xff0c;侵删原文链接 article{peng2023energy, title{Energy Harvesting Reconfigurable Intelligent Surface for UAV Based on Robust Deep Reinforcement Learning}, author{Peng, Haoran and Wang, Li-Chun}, journal{IEEE Transactions on Wireless Comm…

今日不足——学习目标做了但是没执行

今天复习概率论的时候我发现我复习数值计算方法的时候没有严格按照步骤来&#xff0c;如果按照步骤来我的最小二乘本来可以不用错的。我在复习时候的步骤之间就是抛开书本然后之间进入应用然后遇到不会的回头复习概念虽然缺失能做题目了但是不了解每个知识点的原理和思想&#…

el-drawer 被遮罩层覆盖 显示异常

这是由于元素的一些层级设置不同导致的&#xff0c;所以蒙层被放在了最顶端。解决方法就是加上如下2行代码: <el-drawer title"我是标题" :visible.sync"showDrawer" :direction"ltr" :append-to-body"true":modal-append-to-body&…

【C++ STL】 list 模拟实现

文章目录 &#x1f4cd;前言&#x1f308;STL之list的模拟实现&#x1f388;list_node节点的定义&#x1f388;iterator迭代器&#x1f56f;️构造函数&#x1f56f;️*it&#x1f56f;️->&#x1f56f;️it/it&#x1f56f;️it--/--it&#x1f56f;️! / &#x1f388;l…

Web开发介绍

Web开发介绍 1 什么是web开发 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站。 所以Web开发说白了&#xff0c;就是开发网站的&#xff0c;例如下图所示的网站&#xff1a;淘宝&#xff0c;京东等等 那么我们…

如何使用sbvadmin进行私有化部署的代码开发

前言 本文主要讲述如何使用sbvadmin进行私有化部署的代码开发&#xff0c;这里我们用的私有化仓库是gitee&#xff0c;当然你也可以用自己搭建的gitlab来做&#xff0c;原理差不多。 一、新建仓库 1.后端api 导入后端仓库&#xff1a;https://github.com/billyshen26/sbvadmi…

08- 算法解读 Mask R-CNN (目标检测)

要点&#xff1a; Mask R-CNN 解读 参考资料&#xff1a;vision/references/detection at main pytorch/vision GitHub 四 Mask R-CNN 基本信息 4.1 环境配置 Python3.6/3.7/3.8Pytorch1.10或以上pycocotools(Linux:pip install pycocotools; Windows:pip install pycoco…

Zigbee物联网应用与开发复习汇总(附某高校期末真题试卷)

文章目录 一、知识梳理二、编程实战三、高校真题A卷B卷 一、知识梳理 1. Zigbee、蓝牙、IEEE802.11b&#xff08;WiFi&#xff09;标准都是工作在2.4G频段的无线通信标准&#xff1b;Zigbee主要用在短距离无线控制系统&#xff0c;传输少量的控制信息&#xff1b; 2. 短距离无…

【Linux系统】Linux进程信号详解

Linux进程信号 0 引言1 认识信号1.1 什么是信号1.2 发送信号的本质1.3 信号的处理 2 信号的产生2.1 键盘产生2.2 调用系统函数向进程发送信号2.3 由软件条件产生信号2.4 硬件异常产生信号 3 信号的保存4 信号的处理5 总结 0 引言 本篇文章会从Linux信号的产生到信号的保存&…

rtl仿真器-epicsim安装和测试

前言 epicsim 是芯华章的仿真器&#xff0c;基于iverilog 据说速度快两倍。 源码 github https://github.com/x-epic/EpicSim gittee https://gitee.com/x-epic/ 公司网站 https://www.x-epic.com/index.html#/en/developer 维护中了 安装 依赖 有些 apt-get install 就可…

【2023秋招】2023华为od4.28三道题

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

测试开发工程师到底是做什么的?你真的知道吗

目录 一二三线互联网公司对测试开发工程师的要求&#xff1a; 测试开发工程师的具体职责&#xff1a; 不要迷失方向 总结&#xff1a; 测试开发工程师必看视频教程&#xff1a; 一二三线互联网公司对测试开发工程师的要求&#xff1a; 现在很多测试的同事对测试开发工程师…

实现第一个服务器版本的表白墙程序

文章目录 表白墙前言1. 环境部署1.1 创建maven项目1.2 引入依赖1.3 创建目录结构1.4 部署程序 2. 前端页面3. 后端实现3.1 后端逻辑3.2 后端代码 表白墙 前言 基于MySQL数据库和servlet实现的前后端交互的服务器版本表白墙。在页面输入表白内容&#xff0c;在本地通过数据库存…

大数据Doris(二十三):Rollup物化索引作用和注意点

文章目录 Rollup物化索引作用和注意点 一、Rollup物化索引作用 1、改变索引 2、聚合数据

操作系统王道考研学习(二)操作系统的特征

目录 操作系统的特征&#xff1a;并发、共享、虚拟、异步 操作系统中并发为什么那么重要&#xff1f; 讲一讲多道程序技术 介绍一下空分复用技术 异步下程序是走走停停的 操作系统的特征&#xff1a;并发、共享、虚拟、异步 并发和共享 虚拟和异步 &#xff08;为什么要并…

物联网的体系架构

物联网中常见的计算模式&#xff1a;云计算、边缘计算、雾计算等 云计算&#xff1a;一种利用互联网实现随时随地、按需、便捷地使用共享计算设施、存储设备、应用程序等资源的计算模式。边缘计算&#xff1a;在靠近物或数据源头的网络边缘侧&#xff0c;融合网络、计算、存储…

本周前半周总结

刷题刷了六道 青训营视频补看 软件杯项目素材收集&#xff0c;首页制作ing 前面这六道题的题解&#xff1a; 题目1&#xff1a; 这是个交互题&#xff0c;目前遇到的交互题都是用二分解决的。 本题使用二分精准定位拥有重量为2的石头的堆。 为避免时间超限&#xff0c;应该再…