首页 > 编程语言 >将makefile中的宏传递给源码

将makefile中的宏传递给源码

时间:2022-12-03 14:23:01浏览次数:53  
标签:MACRO makefile 传递 TEST 源码 printf test HEHE

前言:

今天遇到一个问题,在makefile中定义个宏,宏为一个字符串,希望将该字符串传递给代码。但是一直传递不过去,最后才找到原因,这里小结一下。

直接上代码,makefile 如下:

 1 C_FLAGS := -DTEST_MACRO_HEHE="abcd1234"
 2  
 3 test: test.o
 4     gcc -o $@ $^
 5  
 6 test.o: test.c
 7     gcc $(C_FLAGS) -c -o $@ $< -Iinclude
 8  
 9 clean:
10     rm -f *.o
11     rm -f test

makefile 希望将宏TEST_MACRO_HEHE传递到代码中。

来看下代码:

 1 #include <stdio.h>
 2  
 3  
 4 int main() {
 5     printf("---- main.\n");
 6  
 7 #ifdef TEST_MACRO_HEHE
 8     printf("==== TEST_MACRO_HEHE %s\n", TEST_MACRO_HEHE);
 9 #else
10     printf("==== not defined\n");
11 #endif
12  
13     return 0;
14 }

编译的时候报错:

 1 gcc -DTEST_MACRO_HEHE="abcd1234" -c -o test.o test.c -Iinclude
 2 test.c: In function ‘main’:
 3 <command-line>:0:17: error: ‘abcd1234’ undeclared (first use in this function)
 4 test.c:8:41: note: in expansion of macro ‘TEST_MACRO_HEHE’
 5      printf("==== TEST_MACRO_HEHE %s\n", TEST_MACRO_HEHE);
 6                                          ^
 7 <command-line>:0:17: note: each undeclared identifier is reported only once for each function it appears in
 8 test.c:8:41: note: in expansion of macro ‘TEST_MACRO_HEHE’
 9      printf("==== TEST_MACRO_HEHE %s\n", TEST_MACRO_HEHE);
10                                          ^
11 Makefile:7: recipe for target 'test.o' failed
12 make: *** [test.o] Error 1

如果宏定义为一个数字,例如12,这样编译是可以的,代码中也能识别该宏。

但是,如果想要传递字符串,在Makefile中需要注意,需要使用转义,如下:

1 C_FLAGS := -DTEST_MACRO_HEHE=\"abcd1234\"
2 test: test.o
3     gcc -o $@ $^
4 test.o: test.c
5     gcc $(C_FLAGS) -c -o $@ $< -Iinclude
6 clean:
7     rm -f *.o
8     rm -f test

转自:https://blog.csdn.net/shift_wwx/article/details/90673865

 

标签:MACRO,makefile,传递,TEST,源码,printf,test,HEHE
From: https://www.cnblogs.com/peifx/p/16947573.html

相关文章

  • idea查看源码快捷键
    查看当前类的层次结构⭐⭐⭐⭐⭐ Ctrl+H查看类结构⭐⭐⭐⭐ Alt+7快速检索类⭐⭐⭐⭐⭐ Ctrl+N(Win)查看方法/类的实现类⭐⭐⭐⭐ Ctrl+Alt+B(Win)......
  • Python笔记-脚本参数传递
    编写Python脚本,经常需要从外部传递参数,此时需要用到getopt和sys。语法如下:getopt.getopt(args,shortopts,longopts=[])args参数列表shortopts短参数,如:-hlongopt......
  • redis字符串的底层源码以及应用实例
    内部编码int8个字节的长整型embstr小于等于39个字节的字符串raw大于39个字节的字符串string底层使用的sds自定义的字符串,因为c语言中string默认为\0为结尾,而redi......
  • C++学习------cmath头文件的源码学习08
    函数族定义---四舍五入与余数函数ceil---返回不小于x的最小整数doubleceil(doublex);代码示例:printf("ceilof2.3is%.1f\n",ceil(2.3));printf("ceilof3.8......
  • shiro源码第一天:登陆验证部分
    登陆验证部分:​​1.单点登陆系统中不同系统密码验证方式不一样​​1.单点登陆系统中不同系统密码验证方式不一样问题:当使用shiro作为鉴权框架时,首先用到的应该就是登陆认证......
  • EasyExcel 实践与源码梳理
    目录​​1.写在最前​​​​1.1EasyExcel版本​​​​1.2初探源码​​​​2.表头实体类MyUser​​​​3.最简单的导出Excel文件​​​​4.源码demo:​​​​4.1读Exc......
  • 学习Spring源码问题总结
    记录一下学习源码遇到的问题:​​1.编译时报错:Failedtoapplyplugin[id'com.gradle.build-scan']​​​​2.报错Groovy:compilermismatchprojectlevelis:2.4Works......
  • (旧)springboot 快速实现登录、注册功能(附Demo源码)
    1.直接跑通Demo,修改配置文件。导入数据库sql文件即可。2.跟着一步一步实现。当然你也可以先跑通Demo,在尝试自己跟着来一遍1.跑通Demo需要源码和Demo跳转新项目跳转新......
  • Dubbo源码-11-服务引用流程
    一入口publicstaticvoidmain(String[]args){//引用远程服务此实例很重封装了与注册中心的连接以及与提供者的连接ReferenceConfig<DemoServic......
  • Dubbo源码-12-Cluster
    一接口声明@SPI(FailoverCluster.NAME)publicinterfaceCluster{/***Mergethedirectoryinvokerstoavirtualinvoker.**@param<T>......