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.rhkb.cn/news/332399.html

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

相关文章

visual studio 2022 ssh 主机密钥算法失败问题解决

 Solution - aengusjiang 问题: I follow the document, then check sshd_config, uncomment“HostKey /etc/ssh/ssh_host_ecdsa_key” maybe need add the key algorithms: #HostKeyAlgorithms ssh-ed25519[Redacted][Redacted]rsa-sha2-256,rsa-sha2-512 Ho…

透视App投放效果,Xinstall助力精准分析,让每一分投入都物超所值!

在移动互联网时代,App的推广与投放成为了每一个开发者和广告主必须面对的问题。然而,如何精准地掌握投放效果,让每一分投入都物超所值,却是一个令人头疼的难题。今天,我们就来谈谈如何通过Xinstall这个专业的App全渠道…

Shell字符串变量

目标 能够使用字符串的3种方式 掌握Shell字符串拼接 掌握shell字符串截取的常用格式 能够定义Shell索引数组和关联数组 能够使用内置命令alias,echo,read,exit,declare操作 掌握Shell的运算符操作 Shell字符串变量 介绍 字符串(String)就是一系…

让大模型变得更聪明三个方向

让大模型变得更聪明三个方向 随着人工智能技术的飞速发展,大模型在多个领域展现出了前所未有的能力,但它们仍然面临着理解力、泛化能力和适应性等方面的挑战。那么,如何让大模型变得更聪明呢? 方向一:算法创新 1.1算…

Git--本地仓库

文章目录 工作区和暂存区工作区(Working Directory)版本库(Repository) 初始化git仓库添加文件到版本库步骤 查看修改内容查看工作区和暂存区状态已add文件已修改/新增 的未add文件git跟踪修改原理 查看提交历史版本回退撤销修改撤…

《python编程从入门到实践》day39加更

# 昨日知识点回顾 添加主题、条目 # 今日知识点学习 19.1.3 编辑条目 1.URL模式edit——entry # learning_logs/urls.py ---snip---# 用于编辑条目的页面path(edit_entry/<int:entry_id>/, views.edit_entry, nameedit_entry), ] 2.视图函数edit_entry() # views.py fr…

Docker搭建mysql性能测试环境

OpenEuler使用Docker搭建mysql性能测试环境 一、安装Docker二、docker安装mysql三、测试mysql连接 一、安装Docker 建立源文件vim /etc/yum.repos.d/docker-ce.repo增加内容[docker-ce-stable] nameDocker CE Stable - $basearch baseurlhttps://repo.huaweicloud.com/docker…

SVM原问题与对偶问题

目的&#xff1a;求出我们的f(X)&#xff0c;它代表着我们X映射到多维的情况&#xff0c;能够帮我们在多维中招到超平面进行分类。 1.优化问题&#xff1a; 1.1推荐好书&#xff1a; 1.2 优化理论中的原问题&#xff1a; 原问题和限制条件如下&#xff1a; 这是一个泛化性…

Linux基础(八):计算机基础概论

本篇博客简单介绍计算机的基础知识&#xff0c;为后续学习做个铺垫。 目录 一、计算机的基本组成 1.1 计算机组成五大部件 1.1.1 运算器&#xff08;Arithmetic Logic Unit&#xff0c;ALU&#xff09; 1.1.2控制器 &#xff08;Control Unit&#xff0c;CU&#xff09; …

网络工程师---第三十八天

ISIS&#xff1a; ISIS含义&#xff1a;中间系统到中间系统IS-IS。 ISIS特点&#xff1a;①内部网关协议IGP&#xff08;Interior Gateway Protocol&#xff09;&#xff0c;用于自治系统内部&#xff1b; ②IS-IS也是一种链路状态协议&#xff0c;使用最短路径优先SPF算法进…

【spring】@ResponseBody注解学习

ResponseBody介绍 ResponseBody 是一个Spring框架中的注解&#xff0c;主要用于Web开发&#xff0c;特别是在Spring MVC框架中。它的核心作用是改变Spring MVC处理HTTP请求响应的行为&#xff0c;使得从控制器方法返回的数据直接写入HTTP响应体&#xff08;Response Body&…

多环境和前后多环境实战

文章目录 一.多环境1.1 什么是多环境1.2 多环境分类1.2.1 本地环境&#xff08;自己的电脑&#xff09;1.2.2 开发环境&#xff08;远程开发&#xff09;1.2.3 测试环境1.2.4 预发布环境1.2.5 正式环境1.2.6 沙箱环境&#xff08;实验环境&#xff09; 1.3 如何实现1.3.1 抽象配…

引流500+创业粉,抖音口播工具

在抖音平台运营一个专注于口播的工具号&#xff0c;旨在集结超过500位热衷于创业的粉丝&#xff0c;这需要精心筹划的内容策略和周到的运营计划。首先&#xff0c;明确你的口播工具号所专注的领域&#xff0c;无论是分享创业经验、财务管理技巧还是案例分析&#xff0c;确保你所…

NL6621 实现获取天气情况

一、主要完成的工作 1、建立TASK INT32 main(VOID) {/* system Init */SystemInit();OSTaskCreate(TestAppMain, NULL, &sAppStartTaskStack[NST_APP_START_TASK_STK_SIZE -1], NST_APP_TASK_START_PRIO); OSStart();return 1; } 2、application test task VOID TestAp…

外卖小程序开发指南:从源码开始构建高效的外卖平台

今天&#xff0c;笔者将为您详细讲解如何从源码开始构建一个高效的外卖小程序&#xff0c;帮助您快速进入这一蓬勃发展的市场。 一、需求分析与设计 需求分析包括&#xff1a; 1.用户需求 2.市场需求 3.技术需求 二、前端开发 以下是开发步骤&#xff1a; -使用微信开发…

【论文阅读】Prompt Fuzzing for Fuzz Driver Generation

文章目录 摘要一、介绍二、设计2.1、总览2.2、指导程序生成2.3、错误程序净化2.3.1、执行过程净化2.3.2、模糊净化2.3.3、覆盖净化 2.4、覆盖引导的突变2.4.1、功率调度2.4.2、变异策略 2.5、约束Fuzzer融合2.5.1、论据约束推理2.5.1、模糊驱动融合 三、评估3.1、与Hopper和OSS…

使用梦畅闹钟,结合自定义bat、vbs脚本等实现定时功能

梦畅闹钟-每隔一段时间运行一次程序 休息五分钟bat脚本&#xff08;播放音乐视频&#xff0c;并锁屏&#xff09; chcp 65001 echo 回车开始休息5分钟 pause explorer "https://www.bilibili.com/video/BV1RT411S7Tk/?p47" timeout /t 3 /nobreak rundll32.exe use…

变分自动编码器(VAE)深入理解与总结

本文导航 0 引言1 起源1.1 自编码器的任务定义1.2 自编码器存在的问题1.3 VAE的核心思路 2 VAE的建模过程2.1 VAE的任务定义2.2 真实分布 ϕ \phi ϕ是什么&#xff0c;为什么要逼近这个分布的参数&#xff0c;如何做&#xff1f;2.3 “重参数化&#xff08;Reparameterization…

前端开发工程师——数据可视化

canvas canvas绘制线段 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthd…