makefile参数传递,gcc给c文件传递宏参数

本文介绍了如何通过Makefile和gcc的-D选项向C源文件传递宏定义参数,以便在编译时根据需求选择代码部分进行编译。在Makefile中设置para=value,然后在执行脚本时应用这些参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码写好之后有时候需要在编译的时候选择编译哪部分代码,通过gcc参数 -D给c文件传递宏参数,下面是具体实现,-D和参数中间空格可以省略
makefile参数传递,make para=value

#include <stdio.h>

#ifdef DEBUG
const char *g_vision = "宏参数是debug";	
#else /* DEBUG */
const char *g_vision = "宏参数是relese";	
#endif /* DEBUG */

#if (FLAG == 1)
int g_flag = 1;	
#else /* FLAG */
int g_flag = 0;	
#endif /* FLAG */

int main(int argc, char *argv[])
{
	printf("%s, flag = %d\n", g_vision, g_flag);
	for (int i = 0; i < argc; i++) {
		printf("argv[%d] = %s\n", i, argv[i]);
	}
	return 0;
}

OBJ=print
CC=gcc
VISION?=DEFAULT
INPUT?=0
$(OBJ):myprint.c
	$(CC) -D $(VISION) -D FLAG=$(INPUT) $< -o $@
clean:
	rm $(OBJ)
#!/bin/bash
read -p "脚本输入测试,传给c文件的flag为:" -t 10 temp
echo "输入的参数值为 flag = ${temp}"
make VISION=${1} INPUT=${temp}
./print 参数1 参数2 参数3
make clean

执行脚本的结果

lala0903@lala0903-virtual-machine:~/c_learn$ ./build.sh DEBUG
脚本输入测试,传给c文件的flag为:1
输入的参数值为 flag = 1
gcc -D DEBUG -D FLAG=1 myprint.c -o print
宏参数是debug, flag = 1
argv[0] = ./print
argv[1] = 参数1
argv[2] = 参数2
argv[3] = 参数3
rm print
###################################################################
lala0903@lala0903-virtual-machine:~/c_learn$ ./build.sh RELESE
脚本输入测试,传给c文件的flag为:2
输入的参数值为 flag = 2
gcc -D RELESE -D FLAG=2 myprint.c -o print
宏参数是relese, flag = 0
argv[0] = ./print
argv[1] = 参数1
argv[2] = 参数2
argv[3] = 参数3
rm print
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值