VSCODE gcc运行多个.c文件

一、简介

        很多时候,开发者需要使用VSCODE进行C语言算法验证。而VSCODE的gcc编译,默认是只编译本文件的内容其他.c文件是不参与编译的。这就给开发者带来很大的困扰,因为开发者不可能把所有的算法都写在一个.c文件,特别是还需要调用一些其他库的时候。

        所以,这里就来分享一下,使用VSCODE编译多个.c文件的方法。

二、实操

        先看如下代码:

void main(void) 
{printf("Hello from main.c\n");
}

        使用VSCODE运行后,可以正常输出。

        然后,创建如下文件结构

        实现如下代码:

        可以看到,我们是希望在main函数中,调用hello.c里面的hello函数,从而打印数据。代码结构很简单,那编译一下看看结果。

        直接报错,提示 未定义hello函数(undefined reference to `hello')。

        奇怪了,明明已经包含了hello的头文件,并且在头文件里面也已经声明了hello函数,为什么会未定义呢?

        这是因为vscode的gcc默认只编译本文件下的main函数。并不会链接其他文件

        那如果我们希望链接其他文件,需要如何操作呢?

        

如果只关注结果,只配置settings.json文件即可。

        配置完settings.json文件后,可以正常编译执行。

tasks.json

         在vscode下按Ctrl+Shift+P或者F1来打开命令面板。

        输入 “Tasks:configure Task”,

         选择“c/c++:gcc.exe生成活动文件

         此时在工程目录下会生成.vscode文件,并且里面会有tasks.json文件

        这里简单介绍一下tasks.json文件。

        tasks.json文件是vscode的编译构建任务配置文件。在该文件中,可以定义多个任务,每个任务都包含了一些属性,例如任务名称、任务类型、执行命令等等。这些任务还可以指定执行依赖关系。通过配置tasks.json文件,可以方便地在vscode中执行这些任务,提高开发效率

属性介绍

type

        任务类型,有3个可选值,shell(执行shell)process(运行进程)cppbuild(C++程序编译构建)。其中前2个事VSCODE安装后即可提供的。cppbuild是安装C++扩展之后支持的。

label

        字符串类型,任务名,必选项。

command

        任务需要执行的具体命令,可以是外部程序shell命令。如对于C++编译任务,就可能是gcc

args

        命令执行的参数

        ${workspaceFolder}:工作区文件夹的绝对路径,就是通过vscode’打开的项目文件夹的绝对路径名

        ${workspaceFolderBasename}:工作区文件夹的基本名称,是去掉上层文件路径只保留项目文件夹名

        ${file}:在vscode中当前打开正在显示或编辑的文件的绝对路径文件名

        ${relativeFile}:当前打开文件相对于工作区文件夹的相对路径名

        ${fileBasename}:当前打开文件的基本名称,不含路径名,但包含文件扩展名,在文件就存放在工作文件夹下时,与${relativeFile}内容一致,如果存放在打开文件夹下的子文件夹时,则二者不一致

        ${fileBasenameNoExtension}:当前打开文件的基本名称,不包括扩展名

        ${fileDirname}:当前打开文件所在的目录路径

        ${fileExtname}:当前打开文件的扩展名

        ${cwd}:启动 VS Code 的工作目录

        -ogcc参数, 用于指定输出文件的名称。如果不使用此参数,编译器默认生成可执行文件a.out。

        -ggcc参数,在可执行文件中加入源代码的信息,以便于调试。这并不意味着整个源文件被嵌入到可执行文件中,而是包含调试信息。

        -cgcc参数,只生成目标文件(.o文件),而不连接成为可执行文件。这个参数通常用于编译不包含主程序的子程序文件。

        -Igcc参数指定头文件的文件夹

        更多gcc参数,可以参考如下链接:20个最常用的GCC编译器参数 · 分布式服务器开发 · 看云

options

        可选项。cwd,设置编译过程的路径

problematcher

        用于控制任务执行时问题匹配及输出

group

        用于定义任务属于哪个组,有3个可选项,build、test、none。一般只会用到build

detail

        备注

settings.json

        该文件用于定义VSCODE的行为和外观

        在vscode下按Ctrl+Shift+P或者F1来打开命令面板,并输入“open user tasks” 

         选择“打开用户任务”,会在当前文件夹的.vscode文件中,生成settings.json文件。但是文件为空

        添加如下代码:

{"editor.fontSize": 17,"workbench.iconTheme": "vscode-icons","workbench.colorTheme": "Noctis Viola","editor.minimap.enabled": true,"C_Cpp.autocomplete": "Default","[cpp]": {"editor.quickSuggestions": true},"[c]": {"editor.quickSuggestions": true},"files.autoSave": "afterDelay","code-runner.executorMap": {"javascript": "node","java": "cd $dir && javac $fileName && java $fileNameWithoutExt","cpp": "cd $dir && g++ *.cpp -o $fileNameWithoutExt && $dir$fileNameWithoutExt","c": "cd $dir && gcc *.c -o $fileNameWithoutExt && $dir$fileNameWithoutExt","objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt","php": "php","python": "python -u","perl": "perl","perl6": "perl6","ruby": "ruby","go": "go run","lua": "lua","groovy": "groovy","powershell": "powershell -ExecutionPolicy ByPass -File","bat": "cmd /c","shellscript": "bash","fsharp": "fsi","csharp": "scriptcs","vbscript": "cscript //Nologo","typescript": "ts-node","coffeescript": "coffee","scala": "scala","swift": "swift","julia": "julia","crystal": "crystal","ocaml": "ocaml","r": "Rscript","applescript": "osascript","clojure": "lein exec","haxe": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt","rust": "cd $dir && rustc $fileName && $dir$fileNameWithoutExt","racket": "racket","scheme": "csi -script","ahk": "autohotkey","autoit": "autoit3","dart": "dart","pascal": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt","d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt","haskell": "runhaskell","nim": "nim compile --verbosity:0 --hints:off --run","lisp": "sbcl --script","kit": "kitc --run","v": "v run","sass": "sass --style expanded","scss": "scss --style expanded","less": "cd $dir && lessc $fileName $fileNameWithoutExt.css","FortranFreeForm": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt","fortran-modern": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt","fortran_fixed-form": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt","fortran": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"},"terminal.integrated.defaultProfile.windows": "PowerShell"
}

        这里只需要关注 “code-runner.executorMap”中的“c”属性。

"c": "cd $dir && gcc *.c -o $fileNameWithoutExt && $dir$fileNameWithoutExt",

        该指令为gcc编译了当前目录下所有的.c文件。 

c_cpp_properties.json        

        该文件用于配置C/C++项目的编译器和intellisense设置

        在vscode下按Ctrl+Shift+P或者F1来打开命令面板,并输入“edit configurations

        选择“编辑配置”,会在当前文件夹的.vscode文件中,生成c_cpp_properties.json文件

属性介绍

name

        代表在什么系统上运行

includePath

        编译文件的路径,默认是当前路径。可以根据需要进行修改,例如

${workspaceFolder}/**
defines

        定义符号,比如宏定义

cStandard

        略

cppStandard

        略

intelliSenseMode

        自动完成相关的配置

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

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

相关文章

如何异地组网添加摄像机?

本文将介绍如何使用天联技术实现异地组网添加摄像机,并保障数据的安全性。 安防摄像机的应用愈发广泛,无论是家庭安防还是企业监控,摄像机都扮演着重要角色。在一些特殊场合或者特殊需求下,我们需要将摄像机添加到异地网络中进行监…

P2. 配置MySQL和用户注册登录模块

P2. 配置MySQL和用户注册登录模块 0 概述Tips1 预备知识1.1 SpringBoot 常用模块1.2 pojo层的实现1.3 mapper层的实现1.4 controller层调试CRUD 2 Spring Security2.1 Spring Security 介绍2.2 Spring Security 对接数据库2.3 密码的加密 3 Jwt验证3.1 传统Session验证方式3.2 …

Monocular Model-Based 3D Tracking of Rigid Objects:2005年综述

1 Introduction 在视频序列中跟踪一个物体意味着在物体或摄像机移动时,持续识别其位置。根据物体类型、物体和摄像机的自由度以及目标应用的不同,有多种方法可供选择。二维跟踪通常旨在跟踪物体或物体部分的图像投影,这些物体的三维位移会导…

如何应对EI会议中的突发情况?

在参加EI会议时,难免会遇到一些突发情况,以下是几种常见的突发情况及应对策略: 突发情况及应对策略 1. 技术故障 投影设备故障:提前将演示文稿上传到会议主办方指定的平台,或带上多个版本(如USB驱动器和云…

TCP通信流程

TCP通信流程 TCP和UDP的区别 TCP(传输控制协议) 面向连接的:在数据传输之前,TCP 需要三次握手来建立连接。可靠的传输:通过序列号、确认响应、重传机制、流量控制和拥塞控制来保证数据正确传输。基于字节流&#xf…

Docker访问文件权限受限问题解决

问题描述 运行项目的docker环境,新添加了一个数据集,但是数据集的访问权限受限(Permission dinied),运行的命令如图所示 问题解决 chmod 777 xxx YYDS!!!但是单纯直接运行会因为权限…

vue使用driver.js引导并自定义样式和按钮

参考网址https://driverjs.com/docs/installation 安装 npm install driver.js 以下是1.3.1版本的基本使用方法 import { driver } from driver.js import driver.js/dist/driver.css mounted() {// 实例化driver对象const driverObj driver({showProgress: true,steps: …

LeetCode674:最长连续递增序列

题目描述 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定&#xff0c;如果对于每个 l < i < r&#xff0c;都有 nums[i] < nums…

uniapp微信小程序在ios端返回不显示弹窗的bug解决

这个问题其实是因为返回页面的时候弹的太快了导致的解决办法&#xff1a; 其实就是返回页面的弹窗加个延迟就好啦

iOS单元测试覆盖率报告导出功能实现

一、插件安装 在Mac电脑上&#xff0c;安装slather插件。插件地址&#xff1a;https://github.com/SlatherOrg/slather 安装命令&#xff1a; gem install slather二、在Xcode上设置Code Coverage&#xff0c;Targets指定XXX 三、在终端切换到项目根目录下&#xff0c;执行单…

在Windows上创建RAM Disk

在Windows 10上创建一个与Linux中的tmpfs相似的内存文件系统&#xff08;一个文件系统&#xff0c;它使用主内存作为存储&#xff09;通常不是操作系统直接提供的功能。不过&#xff0c;有一些方法可以实现类似的效果。 使用软件创建RAM Disk 有一些第三方软件可以帮助在Wind…

牛马真的沉默了,入职第一天就干活

入职第一天就干活的&#xff0c;就问还有谁&#xff0c;搬来一台N手电脑&#xff0c;第一分钟开机&#xff0c;第二分钟派活&#xff0c;第三分钟干活&#xff0c;巴适。。。。。。 打开代码发现问题不断 读取配置文件居然读取两个配置文件&#xff0c;一个读一点&#xff0c;…

Java时间工具类(Date和LocalDateTime)

Date package com.qiangesoft.utils.date;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;/*** 日期工具类** author lq* date 2024-05-23*/ public class DateUtil {public static final String[] C…

HiWoo Box边缘计算网关

​在数字化浪潮汹涌的今天&#xff0c;边缘计算网关成为了连接物理世界与数字世界的桥梁&#xff0c;其重要性日益凸显。HiWoo Box&#xff0c;作为一款功能强大的边缘计算网关&#xff0c;不仅具备了传统网关的基本功能&#xff0c;更在数据采集、处理、传输等方面展现出了卓越…

automa:循环元素的一个示例,取TME结合插件实现自动下载音乐。

因为tme没提供批量下载音乐的功能。我找到了一个插件可以下载。但需要点击播放时&#xff0c;才能感 知。 我原来用python写了一个&#xff0c;能实现&#xff0c;这想把他移植到automa上&#xff0c;同时想使用循环元素的方法&#xff0c;避免不必要的时间浪费。 开始。首先…

2024年商业管理与文化传播国际学术会议(ICBMCC 2024)

2024年商业管理与文化传播国际学术会议&#xff08;ICBMCC 2024) 2024 International Conference on Business Management and Cultural Communication 一、【会议简介】 2024年商业管理与文化传播国际学术会议&#xff08;ICBMCC 2024&#xff09;是一次汇集全球商业管理领域…

Vaex :突破pandas,快速分析100G大数据量

pandas处理大数据的限制 现在的数据科学比赛提供的数据量越来越大&#xff0c;动不动几十个G&#xff0c;甚至上百G&#xff0c;这就要考验机器性能和数据处理能力。 Python中的pandas是大家常用的数据处理工具&#xff0c;能应付较大数据集&#xff08;千万行级别&#xff09…

HarmonyOS之ArkUI布局设计常见细节

这里写目录标题 1. Button设置带有渐变色的背景图片无效1.1 问题分析1.2 成功案例 2. 路由跳转失败2.1 问题分析 1. Button设置带有渐变色的背景图片无效 1.1 问题分析 说明&#xff1a;设置颜色渐变需先设置backgroundColor为透明色。 Button($r(app.string.login), { type…

Logrus IT的专家们已将游戏《菇勇者传说》翻译成俄语

《菇勇者传说》是一款引人入胜的放置类RPG游戏&#xff0c;邪恶的龙将所有人变成了蘑菇。为了恢复人类形态&#xff0c;玩家的角色需要从小蘑菇成长为强大的勇士。 游戏中有多个蘑菇职业&#xff0c;每个职业都有独特的技能。玩家可以根据自己的喜好提升角色的属性和改变外观&…

0基础从前端到Web3 —— Mine Clearance Frontend(一)

初始化项目以及通过dapp-kit连接钱包的部分就不再赘述&#xff0c;具体可以点击查看&#xff0c;如果篇幅当中遇到了一些未添加的依赖项&#xff0c;直接通过pnpm add -D <name>一般都可以解决。 一&#xff1a;链上网络切换 这里提供一个最简单的切换方式&#xff0c;…