Сначала я отвечу на случай, когда PLATFORM
и HOST
одинаковы:
$ make main.o PLATFORM=HOST
Я получаю эту ошибку, это две разные ошибки, и я не могу понять,причина этого.
gcc -c main.c -mcpu= -m --specs= -Wall -Werror -g -O0 -std=c99 -o
main.o
gcc: warning: ‘-mcpu=’ is deprecated; use ‘-mtune=’ or ‘-march=’
instead
gcc: error: missing argument to ‘-mcpu=’
gcc: error: missing argument to ‘--specs=’
gcc: error: unrecognized command line option ‘-m’
Makefile:64: recipe for target 'main.o' failed
make: *** [main.o] Error 1
Это связано с вашим make-файлом: CPU
, ARCH
и SPECS
устанавливаются только в том случае, если PLATFORM
равно MSP432
Таким образом, строка CFLAGS = -mcpu=$(CPU) -m$(ARCH) --specs=$(SPECS) -Wall -Werror -g -O0 -std=c99
оценивается как CFLAGS = -mcpu= -m --specs= -Wall -Werror -g -O0 -std=c99
Когда gcc
вызывается с CFLAGS
в качестве аргумента, что неверно.
Чтобы исправить это, вы можете сделатьэти небольшие изменения в вашем make-файле:
include sources.mk
ifeq ($(PLATFORM),MSP432)
# Platform Overrides
# Architectures Specific Flags
LINKER_FILE = msp432p401r.lds
CPU = cortex-m4
ARCH = thumb
SPECS = nosys.specs
LDFLAGS_ARCH = -T $(LINKER_FILE)
CFLAGS_ARCH = -mcpu=$(CPU) -m$(ARCH) --specs=$(SPECS)
# Compiler Flags and Defines
CC = arm-none-eabi-gcc
LD = arm-none-eabi-ld
endif
ifeq ($(PLATFORM),HOST)
CC = gcc
endif
TARGET = c1m1
LDFLAGS = -Wl,-Map=$(TARGET).map $(LDFLAGS_ARCH)
CFLAGS = $(CFLAGS_ARCH) -Wall -Werror -g -O0
-std=c99
CPPFLAGs =
Теперь для main.c:23:22: fatal error: platform.h: No such file or directory
Вы должны найти, где находится этот файл, и в конечном итоге добавить его в качестве опции gcc
.
ДляНапример, если файл platform.h
находится в /some/directory
, вы можете добавить эту опцию в gcc
, чтобы помочь ему найти его:
-I/some/directory
Так что в make-файле вы можете иметь эту строку:
CFLAGS_ARCH = -mcpu=$(CPU) -m$(ARCH) --specs=$(SPECS) -I/some/directory
РЕДАКТИРОВАТЬ
В комментариях вы добавляете эту проблему к своему вопросу:
, которые решили ее, ошибки:сейчас издесь это
In file included from main.c:23:0: ./include/common/platform.h:30:2: error:
#error "Platform provided is not supported in this Build System" #error "... *** [main.o] Error 1
Что касается файла platform.h
, для его запуска необходимо определить макрос MSP432
или HOST
.
Чтобы определить такой макрос,Опция -D
должна быть передана в gcc
.
Поэтому идея состоит в том, чтобы добавить некоторую строку в make-файл, чтобы определить MSP432
или HOST
при необходимости:
...
ifeq ($(PLATFORM),MSP432)
# Platform Overrides
# Architectures Specific Flags
LINKER_FILE = msp432p401r.lds
CPU = cortex-m4
ARCH = thumb
SPECS = nosys.specs
LDFLAGS_ARCH = -T $(LINKER_FILE)
CFLAGS_ARCH = -mcpu=$(CPU) -m$(ARCH) --specs=$(SPECS) -DMSP432
# Compiler Flags and Defines
CC = arm-none-eabi-gcc
LD = arm-none-eabi-ld
endif
ifeq ($(PLATFORM),HOST)
CFLAGS_ARCH = -DHOST
CC = gcc
endif
...