VSCODE gcc运行多个.c文件

news2024/11/25 4:46:32

一、简介

        很多时候,开发者需要使用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.coloradmin.cn/o/1689451.html

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

相关文章

arXiv AI 综述列表(2024.05.20~2024.05.24)

公众号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 每周末更新,完整版进群获取。 Q 群在群文件,VX 群每周末更新。 目录 1. Beyond Traditional Single Object Tracking: A …

在洁净实验室设计装修中怎么选择合适实验室家具?

在现代科学研究和技术开发中,洁净实验室装修设计成为了确保实验准确性和安全性的重要因素。洁净实验室需要提供一个无尘、无菌、受控的环境,而在洁净实验室装修设计这个过程中,如何选择合适的实验室家具就显得尤为重要,因为它直接…

【NumPy】NumPy实战入门:索引与切片(sort、argsort、searchsorted)详解

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

【静态分析】在springboot使用太阿(Tai-e)03

参考:使用太阿(Tai-e)进行静态代码安全分析(spring-boot篇三) - 先知社区 1. JavaApi 提取 1.1 分析 预期是提取controller提供的对外API,例如下图中的/sqli/jdbc/vuln 先看一下如何用tai-e去获取router…

AI+BI?国内期待值最高的4款智能问答类BI产品测评

AI大模型的这股风终是吹到了数据分析圈。与传统BI相比,问答BI进一步降低了数据获取门槛,通过对话的方式就可以访问数据并得出相应结论,更方便业务人员快速上手分析数据! 问答BI(Q&A BI)在数据分析领域…

平板如何实现无纸化会议

为了实现高效的无纸化会议,连通宝可以是在内部网络部署,那么,平板如何实现无纸化会议? 1. 服务器配置: 部署专用无纸化会议系统服务器(如rhub无纸化会议服务器)至组织的内部网络中。确保该服务…

18.SpringCloud Gateway

简介 SpringCloud Gateway是spingcloud家族的产品,使用netty实现的高性能服务网关,用于替换netflix公司的zuul网关实现。 参考地址: https://spring.io/projects/spring-cloud 术语 工作原理 Route Predicate Factories GatewayFilte…

LeetCode刷题之HOT100之多数元素

2024/5/21 起床走到阳台,外面绵柔细雨,手探出去,似乎感受不到。刚到实验室,窗外声音放大,雨大了。昨天的两题任务中断了,由于下雨加晚上有课。这样似乎也好,不让我有一种被强迫的感觉&#xff0…

张量 t-product 积(matlab代码)

参考文献:Tensor Robust Principal Component Analysis with a New Tensor Nuclear Norm 首先是文章2.3节中 t-product 的定义: 块循环矩阵: 参考知乎博主的例子及代码:(t-product与t-QR分解,另一篇傅里叶对…

Springboot 多环境切换 方法

准备工作 假设系统中有以下几个yml文件: application.ymlapplication-dev.ymlapplication-prode.ymlapplication-test.yml 方法一:在Active Profiles:输入dev 启动效果: 方法二:在Environment variables: 输入spring.profile…

外汇天眼:风险预警!以下平台监管牌照被撤销!

监管信息早知道!外汇天眼将每周定期公布监管牌照状态发生变化的交易商,以供投资者参考,规避投资风险。如果平台天眼评分过高,建议投资者谨慎选择,因为在外汇天眼评分高不代表平台没问题! 以下是监管牌照发生…

【简单介绍下7-Zip,什么是7-Zip?】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

ThingsBoard如何拆分前后端分离启动

后端启动 前端启动 注意事项 ThingsBoard是一个开源的物联网平台,它原本的设计就考虑到了现代Web应用的前后端分离架构。尽管其核心是一个后端服务,负责设备连接、数据处理和存储等,但其用户界面是作为单独的前端应用程序实现的&#xff0c…

8srping循环依赖

循环依赖 1.由同事抛的一个问题开始 最近项目组的一个同事遇到了一个问题,问我的意见,一下子引起的我的兴趣,因为这个问题我也是第一次遇到。平时自认为对spring循环依赖问题还是比较了解的,直到遇到这个和后面的几个问题后&…

超大Sql文件切分工具SQLDumpSplitter —— 筑梦之路

官网:PLB PLB - SQLSplitter 用于将大型MySQL转储拆分为可独立执行的小型SQL文件。 显示100%时并不是已经处理完了,而是才开始 优点 软件程序小巧,不需要安装,直接点击运行就可以最厉害的是SQLDumpSplitter可以自动将结构语句&…

探索LangGraph:如何创建一个既智能又可控的航空客服AI

这种设计既保持了用户控制权,又确保了对话流程的顺畅。但随着工具数量的增加,单一的图结构可能会变得过于复杂。我们将在下一节中解决这个问题。 第三部分的图将类似于下面的示意图: 状态定义 首先,定义图的状态。我们的状态和L…

HCIA第二天复习上

延长传输距离-------中继器(放大器)------物理层设备 可以延长5倍传输距离 增加网络节点数量 网络拓扑结构 1直线型拓扑 信息安全性差 网络延迟高传输速度慢 2环形拓扑 3星型拓扑 4网状型拓扑 传输效率高,…

RISC-V压缩指令扩展测试

概述 RISC-V定义了压缩指令扩展(compressed instruction-set extension ),命名为“C”扩展。压缩指令使用16位宽指令替换32位宽指令,从而减少代码量。这个C扩展可运用在RV32、RV64和RV128指令集上,通常使用“RVC”来表…

继承初级入门复习

注意:保护和私有在类中没有区别,但是在继承中有区别,private在继承的子类不可见,protect在继承的子类可见 记忆方法:先看基类的修饰符是private,那都是不可见的。如果不是,那就用继承的修饰和基…

变量命名的艺术:让你的代码更具可读性

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:为何变量命名如此重要? 二、变量命名的基本规则 1. 避免数…