将makefile中的宏传递给源码

前言:

今天遇到一个问题,在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

 

posted @   墨尔基阿德斯  阅读(556)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示