VScode使用之搭建linux开发环境

2023-11-09

使用SSH链接linux

VScode链接的方法参考如下文章
VScode使用之ssh链接虚拟机

安装C/C++插件

在这里插入图片描述

安装CMake插件

在这里插入图片描述
在这里插入图片描述

使用CMake构建项目

  • 新建工程文件夹
├── main.c  
├── inc   
│ 	└── fun.h   
└── src   
	└── fun.c        
  • 快捷键Ctrl+Shift+P,输入CMake:Quick Start
    在这里插入图片描述
  • 选择生成执行程序还是库,选择Executale
    在这里插入图片描述
    完成后会生成默认的模板文件CMakeLists.txt
  • 快捷键Ctrl+Shift+P,输入CMake:Select a Kit,设置工具链
  • 快捷键Ctrl+Shift+P,输入CMake:Quick Configure,生成工程
    在这里插入图片描述
  • 修改CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0)# CMake最低版本要求
project(my_test VERSION 0.1.0)# 项目信息

include(CTest)
enable_testing()

include_directories(${PROJECT_SOURCE_DIR}/inc)#添加头文件目录
aux_source_directory(./src SRC_LIST)#添加源文件目录
aux_source_directory(. SRC_LIST)#添加源文件目录
add_executable(my_test ${SRC_LIST})#生成执行程序目标
set(EXECUTABLE_OUTPUT_PATH  ${PROJECT_SOURCE_DIR}/bin)#设置执行程序存放的目录


set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
  • 编译工程
    单击下导航build,编译程序
    在这里插入图片描述- 遇到的问题
Bad CMake executable: "". Check to make sure it is installed or the value of the "cmake.cmakePath" setting contains the correct path

解决:使用sudo apt install cmake安装cmake

CMake使用扩展

多级CMakeLists构建

多级CMakeLists构建

cmake_minimum_required(VERSION 3.0.0)# CMake最低版本要求
project(testCmake)# 项目信息

aux_source_directory(. ALL_SRCS)# 添加当前目录下所有的源文件
add_subdirectory(math)# 添加math子目录
add_executable(testCmake ${ALL_SRCS})# 指定生成目标,注意这里要用${ALL_SRCS}
target_link_libraries(testCmake power)# 添加链接库,power是在math子目录的CMakeLists中定义的

子文件夹添加原文件,编译为静态链接库

aux_source_directory(. LIB_SRCS)# 添加当前目录下所有的源文件
add_library (power ${LIB_SRCS})# 当前目录下的文件生成一个链接库

CMake命令说明

  • 使用aux_source_directory命令把某个目录下的所有文件名保存到一个变量中
aux_source_directory(<dir> <variable>)# 添加<dir>目录下所有的文件,保存到<variable>变量中

添加文件的另一种方式

set(<variable> <dir>)
set(SRC_LIST main.c
        rpc/CRNode.c  
        )#主要用于不需要添加文件夹下所有文件时
add_executable(projectName ${variable})# 把<variable>中的所有文件,编译成<projectName>

如果是多个目录编译,首先使用add_subdirectory命令需要把目录包含进来,然后使用target_link_libraries命令,把子项目链接到对应的主项目

add_subdirectory(<sub_dir>)# 添加一个子目录<sub_dir>
target_link_libraries(projectName sub_projectName)# 把子目录的<sub_projectName>库链接到<projectName>主库中

在多目录编译中,还需要在子目录的CMakeLists.txt中设置好链接库

aux_source_directory(. <variable>)# 添加子目录当前目录下所有的源文件,<.>表示当前目录
add_library(sub_projectName ${variable})# 当前目录下的文件生成一个链接库

添加头文件

include_directories(${PROJECT_SOURCE_DIR}/Include)
#添加头文件的搜索路径
include_directories(([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...))
#当有多个搜索路径的时候,路径之间需要添加空格,如果路径有空格就用双引号括起来

其他常用命令参考
https://www.jianshu.com/p/9d246e4071d4

CMake使用注意事项

CMakeLists文件中不区分大小写!!!函数变量大小写都行!!!有时候加不加引号有时候也无所谓!!!

编译时注意不同工程可能添加的宏或者参数不同,酌情修改

使用cmake生成Makefile后,如果有新增文件,需要重新执行cmake。如果只是修改文件的内容,直接make就行。

make 编译时使用的线程数一般比你的逻辑核心数略大一点,编译效率最高。如果线程数远远大于逻辑核心数,线程之间切换次数增大,会造成切换时间的浪费。线程过少,编译效率慢。但是需要考虑你的内存情况,如果内存过小,过多线程反而会降低编译效率,造成电脑卡住,根据实际情况择情选择。

编译与调试工程

在.vscode目录增加luanch.jsontasks.json,本项目可参考附录配置。

附录

luanch.json配置参考

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/bin/my_test",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "Build",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

tasks.json配置参考

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "options": {
        "cwd":"${workspaceFolder}/build"
    },
    "tasks": [
        {
            "label": "cmake",
            "type": "shell",
            "command": "cmake",
            "args":[
                ".."
            ]
        },
        {
            "label":"make",
            "group":{
                "kind": "build",
                "isDefault": true
            },
            "command":"make",
            "args": [
 
            ]
        },
        {
            "label":"Build",
            "dependsOrder": "sequence",
            "dependsOn":[
                "cmake",
                "make"
            ]
        }
    ]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VScode使用之搭建linux开发环境 的相关文章

  • Bash:检查是否给出了参数(例如是否有参数“-a”?)

    我有一个脚本 它应该接受 2 个参数 s 和 d 如果未给出 d 参数 我想删除我的调试文件 与 s 相同 如何检查 1 或 2 是否为 s 或 d 舒尔有两个参数 我可以做到 蛮力 if test 1 d test 2 d then rm
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • 选择fasta文件中氨基酸超过300个且“C”出现至少4次的序列

    我有一个包含蛋白质序列的 fasta 文件 我想选择超过 300 个氨基酸且半胱氨酸 C 氨基酸出现超过 4 次的序列 我使用此命令来选择具有超过 300 个 aa 的序列 cat 72hDOWN fasta fasta bioawk c
  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • 使用 ioctl 在 C++ 中以编程方式添加路由

    我编写了简单的 C 函数 添加了新路线 void addRoute int fd socket PF INET SOCK DGRAM IPPROTO IP struct rtentry route memset route 0 sizeof
  • 使用 systemctl 获取 systemd 进程的正常运行时间或停机时间?

    喜欢使用systemctl is active
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • 如何从 Sublime Text 编辑器调试 Java 应用程序

    有时我正在对相当大的 Java 应用程序进行简单的修复 但我不想打开 Eclipse 来执行此任务 Eclipse 启动时间很长 并且由于该项目是由大量子项目构建的 而这些子项目无论如何都是由 Maven 构建的 因此需要很长时间才能使用
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu

随机推荐

  • 游戏数据运营--2.新版本效果分析案例

    文本内容如下 游戏B 新版本效果分析 游戏B 2017年1月1日4 0版本效果数据如下 1 新用户登录的激活转化率相比3 9版本提高10 目前为27 2 4 0版本首周日活跃人数比之前提高16 目前日均活跃达到10万人 点卡用户在线时长提高
  • Vuex有那几种状态和属性?

    vuex的流程 页面通过mapAction异步提交事件到action action通过commit把对应参数同步提交到mutation mutation会修改state中对于的值 最后通过getter把对应值跑出去 在页面的计算属性中 通过
  • PCB叠层设计与阻抗计算

    1 PCB叠层设计与阻抗计算 01走个流程 哔哩哔哩 bilibili 2 第十七讲 PCB的电源阻抗自动优化 哔哩哔哩 bilibili 3 32高速PCB设计之叠层与阻抗 阻抗计算案例 哔哩哔哩 bilibili 4 PCB阻抗计算工具
  • 一文读懂开源的7大理念

    原文 https www enmotech com web detail 1 844 1 html 软件正在慢条斯理地吞噬世界 开源正在慢条斯理地吞噬软件业 软件正在吞噬世界 是的 对于购物 吃饭 健身 交停车费都需要使用软件的年代 对于平
  • 一个报表的脚本以及输出结果

    Set up pagesize parameters SET NEWPAGE 0 SET PAGESIZE 55 Set the linesize which must match the number of equal signs use
  • OpenWrt设置开机自动启动/延迟启动

    最近在搞路由器自动登录 用到了OpenWrt的自动启动 因为我要运行的是一个Python程序 一条命令足够 就直接在 etc rc local里面改了 python etc Myprogram py 直接占用前台了 既需要让他后台运行 又不
  • python计算定积分

    求 0 1
  • 外部保存echars图片

    传递图表容器id function downloadImpByChart chartId var myChart echarts getInstanceByDom document getElementById chartId var ur
  • 浅谈当下火热的ChatGPT

    ChatGPT这个词语从今年初发布以来 一度成为一个火热的概念 包括CSDN也推出了C知道 不少大佬博友纷纷蹭热点 发布了无数关于ChatGPT的技术 使用 技能 展望未来的文档和博文 其实很多文章我都没有看过 只知道当下这个工具非常的火
  • 快速入门Spring Cloud Hystrix(服务降级、服务熔断、服务监控)

    文章目录 前言 一 服务雪崩 1 服务雪崩概述 2 造成服务雪崩的原因 3 如何防止雪崩 二 Spring Cloud Hystrix 1 什么是Spring Cloud Hystrix 豪猪哥 2 搭建测试环境 1 创建cloud pro
  • Java 23种设计模式通俗理解

    文章目录 工厂方法 建造者模式 抽象工厂 原型模式 单态模式 适配器模式 桥梁模式 合成模式 装饰模式 门面模式 享元模式 代理模式 责任链模式 命令模式 解释器模式 迭代模式 调停者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方
  • 刀具半径补偿 c语言,数控铣床编程时刀具半径补偿指令及运用

    摘要 本文分析了刀具半径补偿概念及指令 如何灵活和合理地运用刀补值 正确编制加工程序以保证数控加工的有效性和准确性等问题 关键词 数控铣床编程 刀具半径补偿指令 一 刀具半径补偿的概念 在数控铣床上进行轮廓加工时 由于铣刀的刀位点通常是定在
  • mysql查询语句提示Unknown column ‘xxx’ in ‘where clause’

    今天写接口自动化测试 在运行结果中提示Unknown column xxx in where clause 的问题 经过大神的指导 顿时明白其中缘由 如果sql中定义的类型是int型的可以不用加引号 但是如果是字符串类型的 必须加引号 例如
  • C++&QT day1

    思维导图
  • CTF(Web方向练习题)(持续更新)

    1 Training WWW Robots 打开应用场景 如下 网址后面添加 robots txt 查看其中内容 robots协议也叫robots txt 统一小写 是一种存放于网站根目录下的ASCII编码的文本文件 内容如下 根据提示 访
  • numpy.random.choice坑

    numpy random choice 默认是有放回 其中有个 replace 的参数控制 默认是 True 如划分数据集用到 注意重复 Code import numpy as np a np arange 5 print a for i
  • Go-Gateway反向代理,性能比拼Nginx

    前言 在以前的一篇文章 基于Fasthttp实现的Gateway 性能媲美Nginx 中 介绍给大家一款使用Go语言开发的实现反向代理功能的开源项目boot4go gateway boot4go gateway项目以fasthttp作为ht
  • gcc入门及合并静态库

    1 gcc入门 1 gcc即是linux下c c 的编译器 gcc经常用的的选项有 c o c表示只编译 compile 源文件但不链接 会把 c或 cc的c源程序编译成目标文件 二进制文件 一般是 o文件 o用于指定输出 out 文件名
  • C++:内联函数

    1 概念 以inline修饰的函数叫做内联函数 编译时C 编译器会在调用内联函数的地方展开 没有函数调用建立栈帧的开销 内联函数提升程序运行的效率 加inline与未加inline的效果可以通过反汇编查看 由于我使用的是VS2022 我先介
  • VScode使用之搭建linux开发环境

    使用SSH链接linux VScode链接的方法参考如下文章 VScode使用之ssh链接虚拟机 安装C C 插件 安装CMake插件 使用CMake构建项目 新建工程文件夹 main c inc fun h src fun c 快捷键Ct