LINUX.ORG.RU

Make файл Syntax error: "(" unexpected

 


0

2

Дали проект на основе *.с и к нему прилагающийся makefile с описанием компиляции, если не вносит изменения в основной файл то при выполнении make пишет «appname» is up date, но как только меняю любой символ в значении строчной переменной в *.с и пытаюсь откомпилировать то мне тут же вываливается :

ubuntu@ubuntu:~/CL-1306_SDK/QR$ make
make[1]: Entering directory '/home/ubuntu/CL-1306_SDK/QR'
test compiling example.c …
/usr/local/arm_linux_4.2/bin/arm-linux-gcc -g -O2 -Wall  -w -I ./include  -c example.c -o example.o
/usr/local/arm_linux_4.2/bin/arm-linux-gcc: 1: Syntax error: "(" unexpected
make[1]: *** [Makefile:65: example.o] Error 2
make[1]: Leaving directory '/home/ubuntu/CL-1306_SDK/QR'
make: *** [Makefile:48: all] Error 2

Из за чего проблема?

MakeFile:

#
###  Makefile
#
#############

CROSS       = /usr/local/arm_linux_4.2/bin/arm-linux-
SRCDIRS		= ./ 
ASFLAGS		=
CFLAGS		= -g -O2 -Wall  -w
CXXFLAGS	=
LDFLAGS		= -Wl,--gc-sections
ARFLAGS		=
OCFLAGS		= 
ODFLAGS		=

INCDIRS		= -I ./include 
LIBDIRS		= -L ./lib/ 
LIBS 		= -lpthread  -lz
#
### You shouldn't need to change anything below this point.
#
##
#AS			= $(CROSS)as
CC			= $(CROSS)gcc
CXX			= $(CROSS)g++
LD			= $(CROSS)gcc
AR			= $(CROSS)ar
OC			= $(CROSS)objcopy
OD			= $(CROSS)objdump
RM			= -rm -fr


#NAME		:= $(notdir $(CURDIR))
NAME		:= demo
SFILES		:= $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.s))
CFILES		:= $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))
CPPFILES	:= $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.cpp))
RMFILES		:= $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*~))
RMFILEO		:= $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.o))

OBJS 		:= $(SFILES:.s=.o) $(CFILES:.c=.o) $(CPPFILES:.cpp=.o)
DEPS		:= $(OBJS:.o=.d)
VPATH		:= $(SRCDIRS)

.PHONY: all rebuild clean

all:
	@$(MAKE) $(NAME)

rebuild:
	@$(MAKE) clean
	@$(MAKE) $(NAME)

$(NAME):	$(OBJS)
	@echo test linking ...	
	$(LD) $(LDFLAGS) -o $@ $^ $(LIBS) $(LIBDIRS) 
	

%.o:	%.s
	@echo assembling $< ...
	$(AS) $(ASFLAGS) $(INCDIRS) $< -o $@

%.o:	%.c
	@echo test compiling $< ...
	$(CC) $(CFLAGS) $(INCDIRS) -c $< -o $@
	
%.o:	%.cpp	
	@echo compiling $< ...
	$(CXX) $(CXXFLAGS) $(INCDIRS) -c $< -o $@
	
%.d:	%.c
	@$(CC) $(CFLAGS) $(INCDIRS) -MM $^ -o $@.tmp
	@sed 's,$(basename $(notdir $@)).o[ :]*,$(@:.d=.o) $@ : ,g' $@.tmp > $@
	@$(RM) $@.tmp
    	
%.d:	%.cpp
	@$(CXX) $(CXXFLAGS) $(INCDIRS) -MM $^ -o $@.tmp
	@sed 's,$(basename $(notdir $@)).o[ :]*,$(@:.d=.o) $@ : ,g' $@.tmp > $@
	@$(RM) $@.tmp

ifeq (mach/mach,)
-include $(DEPS)
endif
	
clean:
	@$(RM) $(OBJS) $(DEPS) $(NAME) $(RMFILES) $(RMFILEO)
	@echo clean completed

а точно дело в make

если не вносит изменения в основной файл то при выполнении make пишет «appname» is up date fix:

пишет «appname» is update

но как только меняю любой символ в значении строчной переменной в *.с и пытаюсь откомпилировать то мне тут же вываливается

хоть покажи эту переменную и её значение в исходниках (и свой вариант тоже)

anonymous ()

/usr/local/arm_linux_4.2/bin/arm-linux-gcc -g -O2 -Wall -w -I ./include -c example.c -o example.o

Бомбани напрямую:

/usr/local/arm_linux_4.2/bin/arm-linux-gcc -g -O2 -Wall -w -I ./include -c example.c -o example.o
anonymous ()
Ответ на: комментарий от Magals

ты меняешь только «0» на «1» и программа не собирается? хм… действительно, странно… оно может не работать, но собираться же должно.

возможно дело в редакторе, кодировках… в исходнике строки завершаются CRLF – явный признак присутствия винды в треде :)

anonymous ()
Ответ на: комментарий от Magals

Всё нормально. make ориентируется на время модификации файла. Если они все после успешной сборки, то без модификаций make просто ничего не делает, создавая впечатление, что всё в порядке.

Проблема не в изменении строкового литерала, там что-то другое. И судя по странному сообщению об ошибке, возможно, что дело в запуске компилятора. Можно попробовать добавить -v и узнать, что он там пытается запускать:

/usr/local/arm_linux_4.2/bin/arm-linux-gcc -g -O2 -Wall  -w -I ./include  -c example.c -o example.o -v
xaizek ★★★★★ ()
Ответ на: комментарий от xaizek

добавил флаг -v в Makefile

результат:

ubuntu@ubuntu:~/CL-1306_SDK/QR$ make
make[1]: Entering directory '/home/ubuntu/CL-1306_SDK/QR'
test compiling example.c ...
/usr/local/arm_linux_4.2/bin/arm-linux-gcc -g -O2 -Wall  -w -I ./include  -c example.c -o example.o -v
/usr/local/arm_linux_4.2/bin/arm-linux-gcc: 1: Syntax error: "(" unexpected
make[1]: *** [Makefile:65: example.o] Error 2
make[1]: Leaving directory '/home/ubuntu/CL-1306_SDK/QR'
make: *** [Makefile:48: all] Error 2
ubuntu@ubuntu:~/CL-1306_SDK/QR$

кажется ничего не изменилось

добавлял флаг тут (я c make работал ну очень редко, возможно что-то не то сделал)

$(NAME):	$(OBJS)
	@echo test linking ...	
	$(LD) $(LDFLAGS) -o $@ $^ $(LIBS) $(LIBDIRS) -v 
	

%.o:	%.s
	@echo assembling $< ...
	$(AS) $(ASFLAGS) $(INCDIRS) $< -o $@ -v

%.o:	%.c
	@echo test compiling $< ...
	$(CC) $(CFLAGS) $(INCDIRS) -c $< -o $@ -v
	
%.o:	%.cpp	
	@echo compiling $< ...
	$(CXX) $(CXXFLAGS) $(INCDIRS) -c $< -o $@ -v
	
%.d:	%.c
	@$(CC) $(CFLAGS) $(INCDIRS) -MM $^ -o $@.tmp -v
	@sed 's,$(basename $(notdir $@)).o[ :]*,$(@:.d=.o) $@ : ,g' $@.tmp > $@
	@$(RM) $@.tmp
    	
%.d:	%.cpp
	@$(CXX) $(CXXFLAGS) $(INCDIRS) -MM $^ -o $@.tmp -v
	@sed 's,$(basename $(notdir $@)).o[ :]*,$(@:.d=.o) $@ : ,g' $@.tmp > $@
	@$(RM) $@.tmp

Magals ()
Ответ на: комментарий от Magals

Да, похож на ELF. Но почему-то он не работает как ELF. Права на исполнение у arm-none-linux-gnueabi-gcc же стоят? Видимо да, раз он вообще «запускается». Можно посмотреть, что выведет file arm-none-linux-gnueabi-gcc.

xaizek ★★★★★ ()
Ответ на: комментарий от xaizek
ubuntu@ubuntu:/usr/local/arm_linux_4.2/bin$ file arm-none-linux-gnueabi-gcc
arm-none-linux-gnueabi-gcc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, with debug_info, not stripped
ubuntu@ubuntu:/usr/local/arm_linux_4.2/bin$

Magals ()
Ответ на: комментарий от Magals

Это возможно и причина. Тогда надо либо 32-битные библиотеки ставить, либо тулчейн для 64-битной системы использовать. Обычно в такой ситуации ошибка No such file or directory, а здесь похоже, что файл /lib/ld-linux.so.2 существует и что-то левое делает, либо что-то ещё этакое происходит.

xaizek ★★★★★ ()
Ответ на: комментарий от Magals

Intel 80386 запускаю на Малинке4

На Raspberry Pi 4? Там ARM-процессор, он не запустит бинарники, собранные для процессоров семейства Intel. Ищите себе тулчейн, который запустится на Pi.

Учитывая, что Вы пытаетесь собирать код под ARM на ARM-процессоре, возможно, Вам хватит просто gcc из поставки в комплекте с операционной системой.

anonymous ()