在我的makefile,我添加參數連接標誌作爲一個變量BOOTLOAD
傳遞變量的Makefile
LDFLAGS += -Wl,--section-start=.bootloader=$(BOOTLOAD)
如果我在makefile文件寫的一切是BOOTLOAD = 0x3800
工作正常。
但我想從C代碼傳遞這個變量,所以我試圖將其定義爲#define BOOTLOAD 0x3800
。但鏈接器找不到它。
如何從C文件中傳遞BOOTLOAD
?
在我的makefile,我添加參數連接標誌作爲一個變量BOOTLOAD
傳遞變量的Makefile
LDFLAGS += -Wl,--section-start=.bootloader=$(BOOTLOAD)
如果我在makefile文件寫的一切是BOOTLOAD = 0x3800
工作正常。
但我想從C代碼傳遞這個變量,所以我試圖將其定義爲#define BOOTLOAD 0x3800
。但鏈接器找不到它。
如何從C文件中傳遞BOOTLOAD
?
而不是「通過」宏從C源文件(這是可能的,但不容易),你可以改爲向預處理器定義宏與-D
選項編譯時:
gcc -DBOOTLOAD=$(BOOTLOAD) -c source_file.c
我建議您檢查GCC preprocessor command line option reference以獲取有關-D
選件的更多信息。
它是能夠特定的源文件中搜索到宏定義,然後生成文件變量設置爲所提取的值,但它更容易,如上所示,以圍繞做的其他方式。
看來你必須在你的makefile從源代碼中的grep BOOTLOAD如下:
BOOTLOAD = $(shell grep '#\s*define\s\+BOOTLOAD' YOUR_SOURCE_FILE | awk 'print $3')
LDFLAGS += -Wl,--section-start=.bootloader=$(BOOTLOAD)