iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >shell怎么通过makefile传参给c语言
  • 359
分享到

shell怎么通过makefile传参给c语言

2023-07-05 15:07:09 359人浏览 八月长安
摘要

这篇文章主要介绍“shell怎么通过makefile传参给C语言”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“shell怎么通过makefile传参给c语言”文章能帮助大家解决问题。建立测试用例建立

这篇文章主要介绍“shell怎么通过makefile传参给C语言”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“shell怎么通过makefile传参给c语言”文章能帮助大家解决问题。

建立测试用例
建立一个文件夹,命名:zgftest
zgftest中包含的文件:makefile、mk.sh、rules.make、zgftest.c

以下分别是每个文件下的测试代码:

rules.make

ZGF_INFO    = -DZGF_TEST_INFO=\"$(ZGF_TEST_INFO)\"GLOBAL_FLAG = $(ZGF_INFO)

mk.sh

#!/bin/sh#功能函数,用来为inputinfo赋值,这段代码测试时也可以写在main中function input_zgf_info(){local lINFO="zhaoguanfeng666"inputinfo="ZGF_TEST_INFO=${lINFO}"}#main中为make传递ZGF_TEST_INFO参数的值function main(){echo "$0"input_zgf_infoecho "input_zgf_info"#inputinfo不加括号和加大括号均可以实现变量替换make $inputinfo# make ${inputinfo}echo "$inputinfo"}main $@

zgftest.c

#include <stdio.h>//简单测试ZGF_TEST_INFO宏是否传递成功int main(int arGC,char **argv){fprintf(stdout,"%s\n",ZGF_TEST_INFO);return 0;}

makefile

#!/bin/bashinclude ./rules.makeCC =gccVERSION :=1.1VPATH =.#获取所有的.c文件SOURCE =$(foreach dir,$(VPATH),$(wildcard $(dir)/*.c))        #将source中所有.c文件变为.o文件OBJ = $(patsubst %.c, %.o, $(SOURCE))GLOBAL_FLAG ?=ERRORifeq ($(GLOBAL_FLAG), ERROR)$(error make error! GLOBAL_FLAG not defined,"rules.make" must be wrong!!!)endifCFLAGS = $(GLOBAL_FLAG)TARGET = main$(TARGET) :$(OBJ)@echo "删除output文件夹"rm -rf ./output@echo "重建output文件夹"mkdir ./output@echo "开始链接......"$(CC) $(OBJ) -o ./output/$@.$(VERSION)@echo "编译链接完成"%.o: %.c  @echo "开始编译......"#在编译时将CFLAGS所代表的变量传递给C$(CC) $(CFLAGS) -c $< -o $@ $(INCLUDES) .PHONY :cleanclean :@echo "开始删除......"rm -rf $(OBJ) ./output@echo "删除完成"

代码总体实现流程:

首先是在rules.make文件中,ZGF_INFO = -DZGF_TEST_INFO=*****这句代码就是通过make向C传递ZGF_TEST_INFO的意思,只是目前-DZGF_TEST_INFO=*****语句还只是赋值给了ZGF_INFO。然后将ZGF_INFO赋值给了GLOBAL_FLAG。

makefile中,包含了rules.make文件,并将GLOBAL_FLAG赋值给了CFLAGS,最终在$(CC) $(CFLAGS) -c $< -o $@ $(INCLUDES) 语句中,CFLAGS会展开,-DZGF_TEST_INFO=*****语句就会被放置到make后面,最终将ZGF_TEST_INFO变量作为宏传递给C。

但是实际上当前的ZGF_TEST_INFO变量里面是没有值的,因为还没有赋值,实际的赋值操作是在mk.sh中被实现的,通过脚本中的函数function input_zgf_info(),为ZGF_TEST_INFO赋值为zhaoguanfeng666,并在脚本的main函数中,执行make时,将ZGF_TEST_INFO作为make的输入参数传递给makefile,从而实现了为makefile中的ZGF_TEST_INFO变量赋值。最终ZGF_TEST_INFO的值被传递进了C中。

编译运行结果:

shell怎么通过makefile传参给c语言

从编译结果可以看出,ZGF_TEST_INFO已经被顺利传递进了makefile,如果传递失败的话,第一个红框中的ZGF_TEST_INFO后面是没有值的。第二个红框表示ZGF_TEST_INFO变量在脚本中被赋值成功。

shell怎么通过makefile传参给c语言

c文件运行结果,成功打印出传递进来的宏的值。

关于“shell怎么通过makefile传参给c语言”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网其他教程频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: shell怎么通过makefile传参给c语言

本文链接: https://www.lsjlt.com/news/352743.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • shell怎么通过makefile传参给c语言
    这篇文章主要介绍“shell怎么通过makefile传参给c语言”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“shell怎么通过makefile传参给c语言”文章能帮助大家解决问题。建立测试用例建立...
    99+
    2023-07-05
  • shell通过makefile传参给c语言的实现示例
    最近学习到的传参过程,感觉很实用,稍加拓展可以实现一些有用的功能。建立测试用例建立一个文件夹,命名:zgftestzgftest中包含的文件:makefile、mk.sh、rules...
    99+
    2023-03-22
    shell 通过makefile传参给c shell makefile传参 makefile传参给c语言
  • shell 通过makefile传参给c语言的实现示例
    最近学习到的传参过程,感觉很实用,稍加拓展可以实现一些有用的功能。建立测试用例建立一个文件夹,命名:zgftestzgftest中包含的文件:makefile、mk.sh、rules.make、zgftest.c 以下分...
    99+
    2023-03-22
    shell 通过makefile传参给c shell makefile传参 makefile传参给c语言
  • Ajax是通过什么给XMLHttpReq.onreadystatechange传递参数
    这篇文章主要介绍“Ajax是通过什么给XMLHttpReq.onreadystatechange传递参数”,在日常操作中,相信很多人在Ajax是通过什么给XMLHttpReq.onreadystatecha...
    99+
    2024-04-02
  • 怎么在Shell脚本中通过参数名传递参数
    这期内容当中小编将会给大家带来有关怎么在Shell脚本中通过参数名传递参数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。#!/bin/bashwhile getopts i:o:p:s...
    99+
    2023-06-09
  • C语言中怎么通过指针参数返回值
    今天小编给大家分享一下C语言中怎么通过指针参数返回值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。简单的案例深夜无聊而引发的...
    99+
    2023-07-05
  • C语言中的makefile怎么使用
    这篇“C语言中的makefile怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中的makefile怎么使用”文...
    99+
    2023-06-17
  • vue怎么通过$router.push传参数
    今天小编给大家分享一下vue怎么通过$router.push传参数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。如何通过$r...
    99+
    2023-07-02
  • php怎么通过url传递参数
    在PHP中,可以通过URL传递参数使用GET方法或POST方法。1. 通过GET方法传递参数:通过在URL中附加参数来传递参数,参数...
    99+
    2023-08-17
    php
  • C语言中如何通过指针参数返回值
    目录简单的案例深夜无聊而引发的问题回归正题简单的案例2.0链表中"迷人"的指针再度分析总结简单的案例 深夜无聊而引发的问题 一般来说,在C语言中一个函数顶多只能返...
    99+
    2023-02-24
    C语言指针 C语言参数返回值 C语言参数
  • vue中怎么通过函数传参数
    本文小编为大家详细介绍“vue中怎么通过函数传参数”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue中怎么通过函数传参数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。vue通过函数传参数一,通过点击事件本身的...
    99+
    2023-07-05
  • C++中怎么通过C语言实现函数重载
    这篇文章给大家介绍C++中怎么通过C语言实现函数重载,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++函数重载的相关模拟代码:int (*func)(void);   int&...
    99+
    2023-06-17
  • python怎么通过命令行传入参数
    在Python中,可以通过`sys.argv`来获取命令行传入的参数。首先,需要导入`sys`模块:```pythonimport ...
    99+
    2023-10-08
    python
  • c语言二维数组怎么作为参数传递
    在C语言中,可以通过指针的方式将二维数组作为参数进行传递。以下是一种常见的方法: void function(int arr[][N...
    99+
    2023-10-27
    c语言
  • c语言数组怎么作为参数传入函数
    在C语言中,数组作为参数传递给函数需要使用指针。具体步骤如下: 在函数声明中,将数组参数声明为指针类型。例如,如果数组类型为int...
    99+
    2024-02-29
    C语言
  • C语言实参与形参的传递方式是什么
    在C语言中,实参与形参的传递方式有两种:值传递和地址传递。 值传递:当调用函数时,将实参的值复制一份传递给形参,函数内部对形参的...
    99+
    2024-03-11
    C语言
  • C语言怎么给指针赋值
    在C语言中,可以使用取地址运算符(&)来获取变量的地址,并将其赋给指针变量。例如,假设有一个整型变量x和一个整型指针变量p,可以使用...
    99+
    2023-09-26
    C语言
  • 怎么通过C语言自动生成MAC地址
    最近在做虚拟机项目时,需要给创建的每一个虚拟机自动生成一个MAC地址,由于MAC地址为48位,而且格式是以:隔开的,所以下面我写了一个c程序,来自动生成MAC地址。复制代码 代码如下...
    99+
    2022-11-15
    MAC C语言
  • c语言怎么给字符串赋值
    在C语言中,给字符串赋值可以使用以下两种方法:1. 使用字符数组赋值:可以直接使用赋值运算符(=)将一个字符数组赋值给另一个字符数组...
    99+
    2023-08-18
    c语言
  • c语言怎么给char数组赋值
    在C语言中,可以使用字符串常量、字符数组、字符串函数等方法来给char数组赋值。 使用字符串常量赋值: char str[] =...
    99+
    2024-02-29
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作