shell 通过makefile传参给c语言的实现示例

yizhihongxing

下面是详细讲解 shell 通过 makefile 传参给 C 语言的实现示例的完整攻略:

1. 确定传参的方式

  • 命令行参数:在程序执行时,可以通过命令行传入参数,使用 main() 函数中的 argcargv 进行接收;
  • 环境变量:通过设置和获取环境变量,来传递参数;
  • 读取配置文件:在程序运行前读取配置文件,将需要的参数传入程序中;
  • Makefile 中添加参数:可以在 Makefile 中添加参数,并将其传入 C 程序中,使其在编译时期起作用。

在此,我们选用第四种方式,在 Makefile 中添加参数。

2. 添加 Makefile 规则

  • 为了能够正确接收到传入的参数,我们需要在 Makefile 中添加相关规则,如下所示:
CFLAGS=-Wall

all: main

main: main.c
    gcc $(CFLAGS) main.c -o main
  • 在这里,我们将传入的参数定义在变量 CFLAGS 中。

3. 在 C 代码中使用传入的参数

  • main.c 中,使用 #include <stdlib.h>getenv() 函数引入。
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
    char *cflags;
    cflags = getenv("CFLAGS");
    if (cflags != NULL) {
        printf("CFLAGS is: %s\n", cflags);
    }
    return 0;
}
  • 在上述代码片段中,getenv() 函数用于获取环境变量中 CFLAGS 的值,并将其输出到终端中。

4. 传入参数并编译运行程序

  • 在终端中运行如下命令,即可将 -Wall 作为 CFLAGS 传入 main.c 程序中,并编译运行程序:
$ make CFLAGS=-Wall
$ ./main
  • 输出内容如下:
CFLAGS is: -Wall
  • 说明我们成功地通过 Makefile 将参数 -Wall 传入了 C 程序中,并成功地输出了获取到的参数的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:shell 通过makefile传参给c语言的实现示例 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++定时器Timer在项目中的使用方法

    下面是“C++定时器Timer在项目中的使用方法”的攻略。 1. Timer类和定时器的原理 首先,要使用C++定时器,我们需要了解Timer类以及定时器的原理。Timer类实现了简单的定时器功能。它内部使用了C++11的库,通过高精度计时来实现定时器的功能。定时器的原理是:在一定时间间隔之后执行一个任务,而这个任务可以是一个函数,一个类的成员函数,或者一个…

    C 2023年5月23日
    00
  • C++ STL 中的数值算法示例讲解

    下面是关于“C++ STL 中的数值算法示例讲解”的完整攻略,包含两个示例说明: C++ STL 中的数值算法示例讲解 数值算法简介 C++ STL 中的数值算法主要用于处理数值型容器的数据。与一般 STL 算法相比,数值算法在处理上具有更高的效率和更高的精度,因此在涉及到数值计算的场景中被广泛使用。 数值算法包含在头文件 numeric 中,其中包括了许多…

    C 2023年5月23日
    00
  • 天谕雷罡圣堂怎么加点 天谕雷罡圣堂加点攻略

    天谕雷罡圣堂加点攻略 天谕雷罡圣堂是一款策略RPG游戏,在游戏中加点是非常重要的一件事情。本文将为大家介绍如何正确地加点以及天谕雷罡圣堂加点攻略。 加点原则 根据职业特长加点,如攻击型职业加攻击,防御型职业加防御等; 根据职业技能加点,如有狂暴技能的职业需要加点提升狂暴效果等; 根据自己的游戏风格加点,如喜欢输出的可以加攻击,喜欢坦克的可以加防御等; 根据B…

    C 2023年5月22日
    00
  • 关于C语言操作符的那些事(超级全)

    关于C语言操作符的那些事(超级全) 前言 C语言中操作符是非常重要的一部分,了解操作符的含义和使用方法可以帮助我们更好地理解和编写C语言程序。本文将介绍常见的C语言操作符,分为算术操作符、关系操作符、逻辑操作符、位操作符、赋值操作符、条件操作符和其他操作符七类。 算术操作符 算术操作符用于执行算术计算,包括加、减、乘、除、取模等。 加号 +:用于加法运算 减…

    C 2023年5月23日
    00
  • C++11获取线程返回值的实现代码

    让我来详细讲解C++11获取线程返回值的实现代码,包括以下几个步骤: 第一步:定义线程函数 在使用C++11获取线程返回值时,我们需要先定义一个线程函数,该函数负责执行耗时的代码逻辑,并返回需要的结果。例如,下面这个线程函数将通过计算两个整数的和来返回一个结果: int sum(int a, int b) { return a + b; } 第二步:创建线程…

    C 2023年5月22日
    00
  • C语言初学者代码中的常见错误与问题

    C语言初学者代码中的常见错误与问题攻略 作为一名C语言初学者,在编写代码的过程中可能会遇到一些常见的错误与问题,这些错误可能会造成程序的崩溃或者输出结果不正确。因此,本攻略将对C语言初学者常见的错误进行讲解,并提供一些解决方案。 1. 未声明变量 在C语言中,如果使用一个未声明的变量,编译器就无法确定该变量的类型和大小,从而导致编译错误。为避免这种错误,需要…

    C 2023年5月24日
    00
  • C语言指针必备基础全面覆盖

    C语言指针必备基础全面覆盖攻略 为什么需要学习指针 在C语言中,指针是一个非常重要的概念,很多高级的编程技术都需要用到指针。同时,C语言本身也是一个比较底层的语言,直接操作内存地址是比较常见的操作,而指针的本质就是存储内存地址。因此,对于C语言开发者来说,学习指针是非常必要的。 指针的基本概念 指针的本质是一个变量,其存储的是一个内存地址,而不是实际的数据。…

    C 2023年5月23日
    00
  • 关于C/C++内存管理示例详解

    关于C/C++内存管理示例详解 C/C++是广泛使用的编程语言,它们的内存管理模型对于程序的性能和安全都非常重要。本文将详细讲解C/C++内存管理示例,以帮助读者更好地理解这一模型。 内存管理模型 C/C++的内存管理模型非常灵活,但同时也要求程序员对内存的操作非常细致。它的主要特点如下: 程序员自行管理内存的分配和释放,需要遵循一定的规则; 内存分为栈和堆…

    C 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部