2015-09-07 70 views
0

在我的makefile,我添加参数连接标志作为一个变量BOOTLOAD传递变量的Makefile

LDFLAGS += -Wl,--section-start=.bootloader=$(BOOTLOAD) 

如果我在makefile文件写的一切是BOOTLOAD = 0x3800工作正常。

但我想从C代码传递这个变量,所以我试图将其定义为#define BOOTLOAD 0x3800。但链接器找不到它。

如何从C文件中传递BOOTLOAD

回答

6

而不是“通过”宏从C源文件(这是可能的,但不容易),你可以改为向预处理器定义宏与-D选项编译时:

gcc -DBOOTLOAD=$(BOOTLOAD) -c source_file.c 

我建议您检查GCC preprocessor command line option reference以获取有关-D选件的更多信息。


能够特定的源文件中搜索到宏定义,然后生成文件变量设置为所提取的值,但它更容易,如上所示,以围绕做的其他方式。

0

看来你必须在你的makefile从源代码中的grep BOOTLOAD如下:

BOOTLOAD = $(shell grep '#\s*define\s\+BOOTLOAD' YOUR_SOURCE_FILE | awk 'print $3') 
LDFLAGS += -Wl,--section-start=.bootloader=$(BOOTLOAD)