ARM GCC编译C代码:如何通过宏传递尖括号形式的头文件名?
解决方案
方法1:使用CMD转义字符处理特殊符号
Windows CMD环境中,<和>是输入输出重定向的特殊字符,直接写入命令会被系统拦截解析。可以用^作为转义符,将尖括号转为普通字符传递给编译器:
arm-none-eabi-gcc -c -DMYHEADER=^<some.h^> -o sample.o sample.c
编译器会将MYHEADER宏展开为<some.h>,最终#include MYHEADER会被解析为合法的#include <some.h>。
方法2:间接宏定义规避特殊字符
如果转义符使用不便,可通过两层宏定义实现需求:
arm-none-eabi-gcc -c -DMYHEADER=HEADER_FILE -DHEADER_FILE=<some.h> -o sample.o sample.c
编译器会先把MYHEADER展开为HEADER_FILE,再进一步替换为<some.h>,同样能得到符合要求的包含语句。
方法3:切换到PowerShell执行命令
若使用PowerShell而非CMD,直接用单引号包裹宏值即可避免特殊字符被解析:
arm-none-eabi-gcc -c -DMYHEADER='<some.h>' -o sample.o sample.c
PowerShell中,单引号内的内容会被视为纯文本,不会将<和>识别为重定向符号。
内容的提问来源于stack exchange,提问作者T. Jastrzębski
相关产品推荐
相关产品推荐

