簡體   English   中英

如何讓 Makefile 使用在單獨的 txt 文件中定義的鏈接器標志?

[英]How to get a Makefile to use the linker flags defined in a separate txt file?

我正在使用簡單的 Makefile 在鏈接階段編譯和構建需要一些共享庫(.so)的 C 代碼。 我知道我可以使用變量 LDFLAGS 傳遞這些庫標志,並將其放在 Makefile 中的 OBJ 文件之后並使其工作。 但是,在我的情況下,我需要編譯需要不同共享庫的代碼的幾個變體,以對 Makefile 進行最小的更改。

我看到了一個 github 提交,如下所示,他們似乎使用了一個 txt 文件(名為 ldflags.txt),他們在其中放置了所需的標志,而 Makefile(這是我需要幫助的地方)似乎神奇地使用了這個文件的內容鏈接。 https://github.com/arduino/ArduinoCore-nRF528x-mbedos/blob/master/variants/ARDUINO_NANO33BLE/ldflags.txt

我的問題是,我們有沒有辦法在單獨的文件中定義 LDFLAGS 以便 Makefile 可以使用它們? 如果可能的話,請你分享一個簡單的例子。

謝謝。

如果您使用gcc ,您可以通過此處最后一段中描述的@file選項引入命令行開關、定義等: https ://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#Overall- 選項 盡管我不完全確定它看起來像clang有相同的行為。

一個示例可能如下所示:

additional_flags := $(if $(build_debug),some/debug_flags.txt,other/nodebug_flags.txt)

LD_FLAGS := -Wl,--gc-sections -Wl,--wrap,main -Wl,--wrap,_malloc_r -Wl,--wrap,_free_r -Wl,--wrap,_realloc_r -Wl,--wrap,_memalign_r -Wl,--wrap,_calloc_r -Wl,--wrap,exit -Wl,--wrap,atexit -Wl,-n --specs=nano.specs -mcpu=cortex-m0 -mthumb -DMBED_ROM_START=0x8000000 -DMBED_ROM_SIZE=0x20000 -DMBED_RAM_START=0x20000000 -DMBED_RAM_SIZE=0x8000 -DMBED_BOOT_STACK_SIZE=1024 -DXIP_ENABLE=0 
LD_SYS_LIBS :=-Wl,--start-group -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys  -Wl,--end-group


PREPROC = arm-none-eabi-cpp
PREPROC_FLAGS := -E -P -Wl,--gc-sections -Wl,--wrap,main -Wl,--wrap,_malloc_r -Wl,--wrap,_free_r -Wl,--wrap,_realloc_r -Wl,--wrap,_memalign_r -Wl,--wrap,_calloc_r -Wl,--wrap,exit -Wl,--wrap,atexit -Wl,-n --specs=nano.specs -mcpu=cortex-m0 -mthumb -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -fmessage-length=0 -fno-exceptions -ffunction-sections -fdata-sections -funsigned-char -MMD -fomit-frame-pointer -Og -DMBED_DEBUG -DMBED_TRAP_ERRORS_ENABLED=1 -DMBED_RTOS_SINGLE_THREAD -D__NEWLIB_NANO -mcpu=cortex-m0 -mthumb -DMBED_ROM_START=0x8000000 -DMBED_ROM_SIZE=0x20000 -DMBED_RAM_START=0x20000000 -DMBED_RAM_SIZE=0x8000 -DMBED_BOOT_STACK_SIZE=1024 -DXIP_ENABLE=0

LIBRARY_PATHS := $(addprefix -L,$(dir $(libmbed_lib) ))
LIBRARIES :=   $(addprefix -l, $(patsubst lib%.a,%,$(notdir $(libmbed_lib) )))
LINKER_SCRIPT ?= mbed-os/targets/TARGET_STM/TARGET_STM32F0/TARGET_STM32F091xC/TOOLCHAIN_GCC_ARM/STM32F091XC.ld
  

application.elf: application.o libmbed.lib ......
    +@echo "linking: $@"
    $(GCC_ARM) $(LD_FLAGS) -T ArduinoCore-nRF528x-mbedos/variants/ARDUINO_NANO33BLE/linker_script.ld $(LIBRARY_PATHS) --output app.elf $(src) $(LIBRARIES) $(LD_SYS_LIBS) $(LIBRARIES) @$(additional_flags)
    @echo Create bin: ------------------
    $(ELF2BIN) -O binary app.elf app.bin

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM