链接器脚本中的Make或Shell变量

jka*_*yca 9 linker makefile

链接器脚本是否可以访问makefile/shell变量并根据所述变量做出决定?

例如,假设我想在不使用不同的链接描述文件的情况下更改下面RAM区域的开头,是否可以使用make变量来执行此操作?

MEMORY
{
ifeq ($(SOME_VAR),0)
RAM (wx) : ORIGIN = 0x100000, LENGTH = 128K
else
RAM (wx) : ORIGIN = 0x200000, LENGTH = 128K
endif
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ohn 5

ld 不会从环境中导入任何变量,因此无法直接使用它们。执行此操作的最佳方法是使用要导出的环境变量创建自己的链接器脚本,并将原始链接器脚本包含如下:

生成文件:

foo:
    echo SOMEVAR=$(SOMEVAR) > environment_linker_script
    ld ...
Run Code Online (Sandbox Code Playgroud)

environment_linker_script:

SOMEVAR=xxx
Run Code Online (Sandbox Code Playgroud)

master_linker_script:

include environment_linker_script

ifeq ($(SOME_VAR),0) ...
Run Code Online (Sandbox Code Playgroud)


The*_*sey 0

我对此表示怀疑,尽管这取决于您使用的链接器。链接器可能会从 make 读取一些导出的变量,但正如我所说,所有这些都取决于特定的链接器功能。另一个想法可能是只要链接器文件不会太复杂,一个选择就是使用 makefile 实际生成它。您可以在 google 上搜索许多有关使用 makefile 生成头文件的示例,您可以遵循相同的路径来生成链接器文件。