我可以在.ld文件中使用预处理程序指令吗?我需要使用两组.ld文件之一,并想让Build引擎使用宏来代替它,我可以这样做吗?
是的你可以。您需要为链接描述文件手动运行预处理器,如下所示:
in="your_linker_script.ld"
out="generated_script.ld"
cflags=-Iinclude/
gcc -E -x c $cflags $in | grep -v '^#' >$out
Run Code Online (Sandbox Code Playgroud)
标志:
-E 指定GCC仅运行预处理器-x c 告诉GCC将链接描述文件视为C源文件(需要使用LD脚本运行GCC)或者,您可以简单地使用cpp工具,它实际上是C预处理器。
之后,您将能够使用生成的链接程序脚本来构建您的程序(例如在Makefile中)。
这是我在项目中解决此问题的方法:
这是我的链接器脚本使用预处理器(#include指令和CONFIG_TEXT_BASE常量)。摘抄:
#include <config.h>
Run Code Online (Sandbox Code Playgroud)这是生成预处理链接脚本的脚本。摘抄:
gcc -E -x c -Iinclude $cflags $in | grep -v '^#' >>$out
Run Code Online (Sandbox Code Playgroud)这是my Makefile,它在$(LDS_GEN)目标(第53行)处生成预处理的链接程序脚本,并且此生成的脚本用于构建结果二进制文件(第42行)。摘抄:
$(LDS_GEN): $(LDS)
build/gen-lds.sh $(LDS) $(LDS_GEN) $(CFLAGS)
$(APP).bin: $(OBJS) $(LDS_GEN)
$(LD) $(OBJS) -T $(LDS_GEN) -o $(APP).elf
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3131 次 |
| 最近记录: |