gcc makefile错误:make:**无规则生成目标
我试图在OSX上使用GCC来编译我的项目。 我刚刚修改了Makefile.posix,如下所示:gcc makefile错误:make:**无规则生成目标,gcc,makefile,Gcc,Makefile,我试图在OSX上使用GCC来编译我的项目。 我刚刚修改了Makefile.posix,如下所示: GNU_INSTALL_ROOT := /usr/local/gcc-arm-none-eabi-4_8-20143 GNU_VERSION := 4.8.3 GNU_PREFIX := arm-none-eabi GDB_PORT_NUMBER := 9992 FLASH_START_ADDR = $(shell $(OBJDUMP) -h $(OUTPUT_BINARY_DIR
GNU_INSTALL_ROOT := /usr/local/gcc-arm-none-eabi-4_8-20143
GNU_VERSION := 4.8.3
GNU_PREFIX := arm-none-eabi
GDB_PORT_NUMBER := 9992
FLASH_START_ADDR = $(shell $(OBJDUMP) -h $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out -j .text | grep .text | awk '{print $$4}')
JLINK_OPTS = -device nrf51822 -if swd -speed 4000
JLINK_GDB_OPTS = -noir
JLINK = JLinkExe $(JLINK_OPTS)
JLINKD_GDB = JLinkGDBServer $(JLINK_GDB_OPTS)
flash-jlink: flash.jlink
$(JLINK) flash.jlink
flash.jlink:
printf "loadbin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(FLASH_START_ADDR)\nr\ng\nexit\n" > flash.jlink
erase-all: erase-all.jlink
$(JLINK) erase-all.jlink
erase-all.jlink:
# Write to NVMC to enable erase, do erase all, wait for completion. reset
printf "w4 4001e504 2\nw4 4001e50c 1\nsleep 100\nr\nexit\n" > erase-all.jlink
run-debug:
$(JLINKD_GDB) $(JLINK_OPTS) $(JLINK_GDB_OPTS) -port $(GDB_PORT_NUMBER)
.PHONY: flash-jlink flash.jlink erase-all erase-all.jlink run-debug
当我尝试使用修改后的Makefile.posix启动服务器时:
make -f ble_app_hrs.Makefile run-debug
我得到了这个错误:
Macintosh:gcc $ make -f ble_app_hrs.Makefile run-debug
/bin/sh: - : invalid option
Usage: /bin/sh [GNU long option] [option] ...
/bin/sh [GNU long option] [option] script-file ...
GNU long options:
--debug
--debugger
--dump-po-strings
--dump-strings
--help
--init-file
--login
--noediting
--noprofile
--norc
--posix
--protected
--rcfile
--restricted
--verbose
--version
--wordexp
Shell options:
-irsD or -c command or -O shopt_option (invocation only)
-abefhkmnptuvxBCHP or -o option
make: *** No rule to make target `JLinkGDBServer', needed by `run-debug'. Stop.
这里是ble_app_hrs.Makefile文件:
TARGET_CHIP := NRF51822_QFAA_CA
BOARD := BOARD_PCA10001
# application source
C_SOURCE_FILES += main.c
C_SOURCE_FILES += battery.c
C_SOURCE_FILES += led.c
C_SOURCE_FILES += ble_dis.c
C_SOURCE_FILES += ble_bas.c
C_SOURCE_FILES += ble_hrs.c
C_SOURCE_FILES += ble_srv_common.c
C_SOURCE_FILES += ble_sensorsim.c
C_SOURCE_FILES += softdevice_handler.c
C_SOURCE_FILES += ble_advdata.c
C_SOURCE_FILES += ble_debug_assert_handler.c
C_SOURCE_FILES += ble_error_log.c
C_SOURCE_FILES += ble_conn_params.c
C_SOURCE_FILES += app_timer.c
C_SOURCE_FILES += pstorage.c
C_SOURCE_FILES += crc16.c
C_SOURCE_FILES += device_manager_peripheral.c
C_SOURCE_FILES += app_trace.c
C_SOURCE_FILES += simple_uart.c
C_SOURCE_FILES += app_gpiote.c
C_SOURCE_FILES += app_button.c
SDK_PATH = ../../../../../
OUTPUT_FILENAME := ble_app_hrs
DEVICE_VARIANT := xxaa
#DEVICE_VARIANT := xxab
USE_SOFTDEVICE := S110
#USE_SOFTDEVICE := S210
CFLAGS := -DDEBUG_NRF_USER -DBLE_STACK_SUPPORT_REQD
# we do not use heap in this app
ASMFLAGS := -D__HEAP_SIZE=0
# keep every function in separate section. This will allow linker to dump unused functions
CFLAGS += -ffunction-sections
# let linker to dump unused sections
#LDFLAGS := -Wl,--gc-sections
INCLUDEPATHS += -I"$(SDK_PATH)Include/s110"
INCLUDEPATHS += -I"$(SDK_PATH)Include/ble"
INCLUDEPATHS += -I"$(SDK_PATH)Include/ble/device_manager"
INCLUDEPATHS += -I"$(SDK_PATH)Include/ble/ble_services"
INCLUDEPATHS += -I"$(SDK_PATH)Include/app_common"
INCLUDEPATHS += -I"$(SDK_PATH)Include/sd_common"
INCLUDEPATHS += -I"$(SDK_PATH)Include/sdk"
C_SOURCE_PATHS += $(SDK_PATH)Source/ble
C_SOURCE_PATHS += $(SDK_PATH)Source/ble/device_manager
C_SOURCE_PATHS += $(SDK_PATH)Source/app_common
C_SOURCE_PATHS += $(SDK_PATH)Source/sd_common
include $(SDK_PATH)Source/templates/gcc/Makefile.common
这里是使用Makefile.posix的文件Makefile.common:
DEVICE := NRF51
DEVICESERIES := nrf51
SDK_INCLUDE_PATH = $(SDK_PATH)/Include/
SDK_SOURCE_PATH = $(SDK_PATH)/Source/
TEMPLATE_PATH += $(SDK_SOURCE_PATH)/templates/gcc/
OUTPUT_BINARY_DIRECTORY := _build
ifeq ($(OS),Windows_NT)
include $(TEMPLATE_PATH)Makefile.windows
else
include $(TEMPLATE_PATH)Makefile.posix
endif
ifeq ($(LINKER_SCRIPT),)
ifeq ($(USE_SOFTDEVICE), S110)
LINKER_SCRIPT = gcc_$(DEVICESERIES)_s110_$(DEVICE_VARIANT).ld
OUTPUT_FILENAME := $(OUTPUT_FILENAME)_s110_$(DEVICE_VARIANT)
else
ifeq ($(USE_SOFTDEVICE), S210)
LINKER_SCRIPT = gcc_$(DEVICESERIES)_s210_$(DEVICE_VARIANT).ld
OUTPUT_FILENAME := $(OUTPUT_FILENAME)_s210_$(DEVICE_VARIANT)
else
LINKER_SCRIPT = gcc_$(DEVICESERIES)_blank_$(DEVICE_VARIANT).ld
OUTPUT_FILENAME := $(OUTPUT_FILENAME)_$(DEVICE_VARIANT)
endif
endif
else
# Use externally defined settings
endif
CPU := cortex-m0
# Toolchain commands
CC := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc"
AS := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as"
AR := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar" -r
LD := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld"
NM := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm"
OBJDUMP := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump"
OBJCOPY := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy"
MK := mkdir
RM := rm -rf
OBJECT_DIRECTORY := _build
LISTING_DIRECTORY := _build
C_SOURCE_FILES += system_$(DEVICESERIES).c
ASSEMBLER_SOURCE_FILES += gcc_startup_$(DEVICESERIES).s
# Linker flags
#LDFLAGS += -L"$(GNU_INSTALL_ROOT)/arm-none-eabi/lib/armv6-m"
#LDFLAGS += -L"$(GNU_INSTALL_ROOT)/lib/gcc/arm-none-eabi/$(GNU_VERSION)/armv6-m"
LDFLAGS += -Xlinker -Map=$(LISTING_DIRECTORY)/$(OUTPUT_FILENAME).map
LDFLAGS += -mcpu=$(CPU) -mthumb -mabi=aapcs -L $(TEMPLATE_PATH) -T$(LINKER_SCRIPT)
# Compiler flags
CFLAGS += -mcpu=$(CPU) -mthumb -mabi=aapcs -D$(DEVICE) -D$(BOARD) -D$(TARGET_CHIP) --std=gnu99
CFLAGS += -Wall -Werror
CFLAGS += -mfloat-abi=soft
# Assembler flags
ASMFLAGS += -x assembler-with-cpp
INCLUDEPATHS += -I"../"
INCLUDEPATHS += -I"$(SDK_PATH)Include"
INCLUDEPATHS += -I"$(SDK_PATH)Include/gcc"
INCLUDEPATHS += -I"$(SDK_PATH)Include/ext_sensors"
# Sorting removes duplicates
BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) )
####################################################################
# Rules #
####################################################################
C_SOURCE_FILENAMES = $(notdir $(C_SOURCE_FILES) )
ASSEMBLER_SOURCE_FILENAMES = $(notdir $(ASSEMBLER_SOURCE_FILES) )
# Make a list of source paths
C_SOURCE_PATHS += ../ $(SDK_SOURCE_PATH) $(TEMPLATE_PATH) $(wildcard $(SDK_SOURCE_PATH)*/) $(wildcard $(SDK_SOURCE_PATH)ext_sensors/*/) $(wildcard $(SDK_SOURCE_PATH)ble/*/)
ASSEMBLER_SOURCE_PATHS = ../ $(SDK_SOURCE_PATH) $(TEMPLATE_PATH) $(wildcard $(SDK_SOURCE_PATH)*/)
C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILENAMES:.c=.o) )
ASSEMBLER_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASSEMBLER_SOURCE_FILENAMES:.s=.o) )
# Set source lookup paths
vpath %.c $(C_SOURCE_PATHS)
vpath %.s $(ASSEMBLER_SOURCE_PATHS)
# Include automatically previously generated dependencies
-include $(addprefix $(OBJECT_DIRECTORY)/, $(COBJS:.o=.d))
### Targets
debug: CFLAGS += -DDEBUG -g3 -O0
debug: ASMFLAGS += -DDEBUG -g3 -O0
debug: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
.PHONY: release
release: clean
release: CFLAGS += -DNDEBUG -O3
release: ASMFLAGS += -DNDEBUG -O3
release: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
echostuff:
@echo C_OBJECTS: [$(C_OBJECTS)]
@echo C_SOURCE_FILES: [$(C_SOURCE_FILES)]
@echo C_SOURCE_PATHS: [$(C_SOURCE_PATHS)]
## Create build directories
$(BUILD_DIRECTORIES):
$(MK) $@
## Create objects from C source files
$(OBJECT_DIRECTORY)/%.o: %.c
# Build header dependencies
$(CC) $(CFLAGS) $(INCLUDEPATHS) -M $< -MF "$(@:.o=.d)" -MT $@
# Do the actual compilation
$(CC) $(CFLAGS) $(INCLUDEPATHS) -c -o $@ $<
## Assemble .s files
$(OBJECT_DIRECTORY)/%.o: %.s
$(CC) $(ASMFLAGS) $(INCLUDEPATHS) -c -o $@ $<
## Link C and assembler objects to an .out file
$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out: $(BUILD_DIRECTORIES) $(C_OBJECTS) $(ASSEMBLER_OBJECTS) $(LIBRARIES)
$(CC) $(LDFLAGS) $(C_OBJECTS) $(ASSEMBLER_OBJECTS) $(LIBRARIES) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
## Create binary .bin file from the .out file
$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin
## Create binary .hex file from the .out file
$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out
$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
## Default build target
.PHONY: all
all: clean release
clean:
$(RM) $(OUTPUT_BINARY_DIRECTORY)
## Program device
.PHONY: flash
flash: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
nrfjprog --reset --program $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex
.PHONY: reset
reset:
nrfjprog --reset
.PHONY: erase
erase:
nrfjprog --erase
设备:=NRF51
设备系列:=nrf51
SDK\u INCLUDE\u PATH=$(SDK\u PATH)/INCLUDE/
SDK\源\路径=$(SDK\路径)/源/
模板\路径+=$(SDK\源\路径)/模板/gcc/
输出\u二进制\u目录:=\u生成
ifeq($(操作系统),Windows\u NT)
包含$(模板路径)Makefile.windows
其他的
包括$(模板路径)Makefile.posix
恩迪夫
ifeq($(链接器脚本),)
ifeq($(使用软设备),S110)
链接器\u脚本=gcc\u$(设备系列)\u s110\u$(设备变量).ld
输出文件名:=$(输出文件名)\u s110\u$(设备变量)
其他的
ifeq($(使用软设备),S210)
链接器\u脚本=gcc\u$(设备系列)\u s210\u$(设备变量).ld
输出文件名:=$(输出文件名)\u s210\u$(设备变量)
其他的
链接器\u脚本=gcc\u$(设备系列)\u空白\u$(设备变量).ld
输出文件名:=$(输出文件名)\$(设备变量)
恩迪夫
恩迪夫
其他的
#使用外部定义的设置
恩迪夫
CPU:=cortex-m0
#工具链命令
CC:=“$(GNU安装根)/bin/$(GNU前缀)-gcc”
AS:=“$(GNU安装根)/bin/$(GNU前缀)-AS”
AR:=“$(GNU安装根)/bin/$(GNU前缀)-AR”-r
LD:“$(GNU安装根)/bin/$(GNU前缀)-LD”
NM:=“$(GNU安装根)/bin/$(GNU前缀)-NM”
OBJDUMP:=“$(GNU安装根)/bin/$(GNU前缀)-OBJDUMP”
OBJCOPY:=“$(GNU安装根)/bin/$(GNU前缀)-OBJCOPY”
MK:=mkdir
RM:=RM-rf
对象\u目录:=\u生成
清单\u目录:=\u构建
C_SOURCE_FILES+=system_$(DEVICESERIES).C
汇编程序\u源\u文件+=gcc\u启动\u$(DEVICESERIES).s
#链接器标志
#LDFLAGS+=-L“$(GNU安装根)/arm无eabi/lib/armv6-m”
#LDFLAGS+=-L“$(GNU安装根)/lib/gcc/arm none-eabi/$(GNU版本)/armv6-m”
LDFLAGS+=-Xlinker-Map=$(列出目录)/$(输出文件名).Map
LDFLAGS+=-mcpu=$(CPU)-mthumb-mabi=aapcs-L$(模板路径)-T$(链接器脚本)
#编译器标志
CFLAGS+=-mcpu=$(CPU)-mthumb-mabi=aapcs-D$(设备)-D$(板)-D$(目标芯片)-std=gnu99
CFLAGS+=-Wall-Werror
CFLAGS+=-mfloat abi=soft
#汇编程序标志
带cpp的ASMFLAGS+=-x汇编程序
INCLUDEPATHS+=-I.“/”
includePath+=-I“$(SDK\u路径)Include”
includePath+=-I“$(SDK\u路径)Include/gcc”
INCLUDEPATHS+=-I“$(SDK\u路径)包含/ext\u传感器”
#排序将删除重复项
构建目录:=$(排序$(对象目录)$(输出二进制目录)$(列表目录))
####################################################################
#规则#
####################################################################
C_源文件名=$(notdir$(C_源文件))
汇编程序源文件名=$(notdir$(汇编程序源文件))
#列出源路径
C_源路径+=../$(SDK_源路径)$(模板路径)$(通配符$(SDK_源路径)*/)$(通配符$(SDK_源路径)ext_sensors/*/)$(通配符$(SDK_源路径)ble/*/)
汇编程序源路径=../$(SDK源路径)$(模板路径)$(通配符$(SDK源路径)*/)
C_OBJECTS=$(addprefix$(OBJECT_DIRECTORY)/,$(C_源文件名:.C=.o))
汇编程序\对象=$(addprefix$(对象\目录)/,$(汇编程序\源\文件名:.s=.o))
#设置源查找路径
vpath%.c$(c\u源路径)
vpath%.s$(汇编程序\u源\u路径)
#包括以前自动生成的依赖项
-包括$(addprefix$(OBJECT_DIRECTORY)/,$(COBJS:.o=.d))
###目标
调试:CFLAGS+=-DDEBUG-g3-O0
调试:asmlags+=-DDEBUG-g3-O0
调试:$(输出\二进制\目录)/$(输出\文件名).bin$(输出\二进制\目录)/$(输出\文件名).hex
.虚假:释放
释放:清洁
发布:CFLAGS+=-DNDEBUG-O3
发布:asmlags+=-DNDEBUG-O3
发行版:$(输出\二进制\目录)/$(输出\文件名).bin$(输出\二进制\目录)/$(输出\文件名).hex
echostuff:
@回显C_对象:[$(C_对象)]
@回显C_源文件:[$(C_源文件)]
@回声C_源路径:[$(C_源路径)]
##创建生成目录
$(生成目录):
美元(MK)$@
##从C源文件创建对象
$(对象目录)/%.o:%.c
#生成头依赖项
$(CC)$(CFLAGS)$(INCLUDEPATHS)-M$<-MF“$(@:.o=.d)”-MT$@
#进行实际编译
$(CC)$(CFLAGS)$(INCLUDEPATHS)-c-o$@$<
##汇编.s文件
$(对象目录)/%.o:%.s
$(CC)$(asmlags)$(INCLUDEPATHS)-c-o$@$<
##将C和汇编程序对象链接到.out文件
$(输出\二进制\目录)/$(输出\文件名)。输出:$(生成\目录)$(C\对象)$(汇编程序\对象)$(库)
$(CC)$(LDFLAGS)$(C\u对象)$(汇编程序\u对象)$(库)-o$(输出\u二进制\u目录)/$(输出\u文件名).out
##从.out文件创建二进制.bin文件
$(输出\二进制\目录)/$(输出\文件名).bin:$(输出\二进制\目录)/$(输出\文件名).out
$(OBJCOPY)-O binary$(输出\二进制\目录)/$(输出\文件名).out$(输出\二进制\目录)/$(输出\文件名).bin
##从.out文件创建二进制.hex文件
$(输出\二进制\目录)/$(输出\文件名).hex:$(输出\二进制\目录)/$(输出\文件名).out
$(OBJCOPY)-O ihex$(输出\二进制\目录)/$(输出\文件名).out$(输出\二进制\目录)/$(输出\文件名).hex
##默认生成目标
冒牌货:全部
全部:清洁释放
清洁:
$(RM)$(输出\二进制\目录)
##程序设备
.假的:闪光
flash:$(输出\二进制\目录)/$(输出\文件名).hex
nrfjprog--重置--程序$(输出\二进制\目录)/$(输出\文件名).hex
.虚假:重置
重置:
nrfjprog—重置
.假的:抹掉
擦除:
nrfjprog—擦除
如果您有任何帮助,我们将不胜感激
flash-jlink: flash.jlink $(JLINK) flash.jlink
flash.jlink: printf "loadbin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(FLASH_START_ADDR)\nr\ng\nexit\n" >flash.jlink
erase-all: erase-all.jlink $(JLINK) erase-all.jlink
# Write to NVMC to enable erase, do erase all, wait for completion. reset
erase-all.jlink: printf "w4 4001e504 2\nw4 4001e50c 1\nsleep 100\nr\nexit\n" > erase-all.jlink
run-debug: $(JLINKD_GDB) $(JLINK_OPTS) $(JLINK_GDB_OPTS) -port $(GDB_PORT_NUMBER)
flash-jlink: flash.jlink
$(JLINK) flash.jlink
flash.jlink:
printf "loadbin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(FLASH_START_ADDR)\nr\ng\nexit\n" >flash.jlink
erase-all: erase-all.jlink
$(JLINK) erase-all.jlink
# Write to NVMC to enable erase, do erase all, wait for completion. reset
erase-all.jlink:
printf "w4 4001e504 2\nw4 4001e50c 1\nsleep 100\nr\nexit\n" > erase-all.jlink
run-debug:
$(JLINKD_GDB) $(JLINK_OPTS) $(JLINK_GDB_OPTS) -port $(GDB_PORT_NUMBER)