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

        自动完成相关的配置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年5月计算机视觉论文推荐:包括扩散模型、视觉语言模型、图像编辑和生成、视频处理和生成以及图像识别等各个主题

我们今天总结下2024年5月发表的最重要的论文,重点介绍了计算机视觉领域的最新研究和进展,包括扩散模型、视觉语言模型、图像编辑和生成、视频处理和生成以及图像识别等各个主题。 Diffusion Models 1、Dual3D: Efficient and Consistent Text-to-3D Ge…

mac清理软件推荐免费 mac清理系统数据怎么清理 cleanmymac和腾讯柠檬哪个好

macbook是苹果公司的一款高性能的笔记本电脑,受到了很多用户的喜爱。但是,随着使用时间的增长,macbook的系统也会积累一些垃圾文件,影响其运行速度和空间。那么,macbook系统清理软件推荐有哪些呢?macbook用…

模板编译之入口分析

Vue 是一个渐进式 JavaScript 框架,提供了简单易用的模板语法,帮助开发者以声明式的方式构建用户界面。Vue 的模板编译原理是其核心之一,它将模板字符串编译成渲染函数,并在运行时高效地更新 DOM。本文将深入探讨 Vue 模板编译的原…

Optica数据库 (原OSA美国光学学会电子期刊)文献去哪里查找下载

Optica(OSA)数据库涵盖了光学和光子学理论研究和实际应用的各个领域,包括:光学设备、光学成像、光纤通信、分析方法、光通信、光纤、半导体激光、光传输、光学系统、计量学、带宽、量子电子学。 该库包括18种学会期刊&#xff08…

5月21日 网络编程day4

1.项目中如何实现TCP的并发? 答:采用多进程、多线程或者IO多路复用进行通信。 2.TCP通信过程中的三次握手? 答:①:客户端发送SYN包(SYN1,seq0)给服务器,并进入SYN_SEN…

【大模型】 基于AI和全球化进程的权衡:开源大模型与闭源大模型

【大模型】 基于AI和全球化进程的权衡:开源大模型与闭源大模型 前言 实际上关于开源or闭源,一直以来都是颇有争议的话题,人们争执于数据的隐私性和共享性,到底哪一方能获得的收益更大。而对于开源与闭源哪个更好实际上也就是说是…

YoloV9实战与改进——专栏目录

摘要 🔥🚀本专栏教你如何嗨翻Yolov9!🚀🔥 🚀炸裂升级:嗨,小伙伴们!这里有一波Yolov9的升级大招,带你领略最新论文的精华!💥 什么注意…

ue引擎游戏开发笔记(47)——设置状态机解决跳跃问题

1.问题分析: 目前当角色起跳时,只是简单的上下移动,空中仍然保持行走动作,并没有设置跳跃动作,因此,给角色设置新的跳跃动作,并优化新的动作动画。 2.操作实现: 1.实现跳跃不复杂&…

得物小程序逆向+qt可视化(不含sku)

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章未…

loguru和print输出顺序乱序

执行代码&#xff1a; from loguru import logger for i in range(1000):print(i)logger.info(i)执行效果&#xff1a; 0 1 2 3 4 2024-05-25 09:52:01.974 | INFO | __main__:<module>:6 - 0 2024-05-25 09:52:01.974 | INFO | __main__:<module>:6 - 1…

Java面试八股之可重入锁ReentrantLock是怎么实现可重入的

可重入锁ReentrantLock是怎么实现可重入的 ReentrantLock实现可重入性的机制主要依赖于以下几个核心组件和步骤&#xff1a; 状态计数器&#xff1a;ReentrantLock内部维护一个名为state的整型变量作为状态计数器&#xff0c;这个计数器不仅用来记录锁是否被持有&#xff0c;…

【算法例题】n元钱买n只鸡

题目描述&#xff1a;公鸡5元1只&#xff0c;母鸡3元1只&#xff0c;小鸡1元3只&#xff0c;问&#xff1a;n元钱买n只鸡&#xff0c;怎么买&#xff1f; 解题思路&#xff1a;这题要用枚举算法&#xff0c;枚举鸡的数量&#xff0c;代码如下&#xff1a; ​#include <bit…

UE5 像素流与web 交互

总结下虚幻与网页的交互&#xff0c;这里将ue5 与js 交互传递参数记录下&#xff0c;其它的博主写的就是缺胳膊少腿的要么就是封闭收费&#xff0c;这个是在官方可以查询到。这里记录下&#xff1a; 点个关注不迷路&#xff1a; 具体的使用如下&#xff1a; 在你的游戏玩家类…

想要修改Excel表格内容,怎么移除编辑权限?

在使用Excel进行数据处理和管理时&#xff0c;我们经常会遇到需要保护工作表以防止误操作的情况。有时可能碰到“被保护单元格不支持此功能”的提示&#xff0c;本文将详细介绍这个问题的解决方案&#xff0c;帮助你取消单元格保护&#xff0c;使用所需的功能。 一、取消单元格…

01_Spark概述

文章目录 1.Spark概述Spark就是基于MR开发分布式计算分布式存储分布式传输集群中心化集群去中心化Spark集群中心化框架与系统引擎Driver 2.Spark核心模块3.spark和MR开发语言上处理方式Spark能否代替MR&#xff1f; 4.Spark运行模式部署Spark部署方式local模式 1.Spark概述 Sp…

汇编实现的操作系统

掌握X86汇编语言和GDB程序调试工具对于程序员来说是非常重要的_gdb 查看x86汇编-CSDN博客 掌握编译器和虚拟机的开发有哪些方面的好处-CSDN博客 Ville Mikael Turjanmaan开发的一个操作系统MenuetOS可运行在IA-32, x86-64平台上&#xff0c;完全用 64 位汇编语言编写。功能包…

【vue-1】vue入门—创建一个vue应用

最近在闲暇时间想学习一下前端框架vue&#xff0c;主要参考以下两个学习资料。 官网 快速上手 | Vue.js b站学习视频 2.创建一个Vue3应用_哔哩哔哩_bilibili 一、创建一个vue3应用 <!DOCTYPE html> <html lang"en"> <head><meta charset&q…

Unreal Engine5 Landscape地形材质无法显示加载

UE5系列文章目录 文章目录 UE5系列文章目录前言一、解决办法 前言 在使用ue5做地形编辑的时候&#xff0c;明明刚才就保存的Landscape地形完全消失不见&#xff0c;或者是地形的材质不见了。重新打开UE5发现有时候能解决&#xff0c;但大多数时候还是没有解决&#xff0c;我下…

AI应用案例:服务器智能分析管理系统

服务器硬件配置、性能状态、所运行的应用系统等信息分散于多个不同的信息管理系统。人为查询判断现有的服务器资源是否满足用户需求&#xff0c;且需结合资产管理系统与Maximo基础资源、性能监控、运维管理等各个系统互不关联&#xff0c;数据分散不能为运维管理提供完整一致的…

探索AI写作工具:五款推荐

在现实生活中&#xff0c;除了专业的文字工作者&#xff0c;各行各业都避免不了需要写一些东西&#xff0c;比如策划案、论文、公文、讲话稿、总结计划……等等。而随着科技的进步&#xff0c;数字化时代的深入发展&#xff0c;AI已经成为日常工作中必不可少的工具了&#xff0…