Как использовать make-файл с OpenBSD 5.8

Когда я печатаю, ничего не происходит. Если я делаю это с Linux Ubuntu, то make собирает мои проекты. Почему это не работает с BSD? Makefile:

##################################################
## General configuration
## =====================

# Every Makefile should contain this line:
SHELL=/bin/sh

# Program for compiling C programs. 
CC=gcc

# What allocation strategy to use, and number of quick fit lists.
STRATEGY=4
NRQUICKLISTS=6

# Extra flags to give to the C preprocessor and programs that use it (the C and Fortran compilers). 
CFLAGS=-DSTRATEGY=$(STRATEGY) -DNRQUICKLISTS=$(NRQUICKLISTS)

# Default plus extra flags for C preprocessor and compiler.
all_cflags=$(CFLAGS) -Wall -Wextra -ansi -O4

# Malloc source file to use. Set to empty (with `make MALLOC=`) for system default.
MALLOC=malloc.c


##################################################
## Setup files variables
## =====================

# Source files to compile and link together
srcs=$(MALLOC) tstalgorithms.c tstcrash.c tstcrash_complex.c tstcrash_simple.c \
     tstextreme.c tstmalloc.c tstmemory.c tstmerge.c tstrealloc.c \
     tstbestcase.c tstworstcase.c

# Executables
execs=$(patsubst tst%.c, tst%, $(filter tst%.c, $(srcs)))


##################################################
## Ordinary targets
## ================

# http://www.gnu.org/software/make/manual/make.html#Phony-Targets
# These are not the name of files that will be created by their recipes.
.PHONY: all clean

all: $(execs)

tst%: tst%.o $(MALLOC:.c=.o)
    $(CC) $(all_cflags) -o $@ $^

# These programs can not be compiled as ANSI-standard C.
tst%.o: tst%.c
    $(CC) -c $(CFLAGS) $< -o $@

# But the rest should be ANSI-standard C.
%.o: %.c
    $(CC) -c $(all_cflags) $< -o $@

clean:
    -rm -f *.o core $(execs)

Это сеанс:

$ strings `which make` | grep -B1 MAKE_VERSION
$ which make
/usr/bin/make
$ make -V MAKE_VERSION

$ make
$ ls
Makefile                                tstbestcase_time.gnuplot
README                                  tstcommon.h
README.md                               tstcrash.c
RUN_TESTS                               tstcrash_complex.c
a.out                                   tstcrash_simple.c
best.c                                  tstextreme.c
brk.h                                   tstmalloc.c
first.c                                 tstmemory.c
malloc.c                                tstmerge.c
malloc.h                                tstrealloc.c
quick.c                                 tstworstcase.c
tst.h                                   tstworstcase.dat.tgz
tstalgorithms.c                         tstworstcase_memory.gnuplot
tstbestcase.c                           tstworstcase_time.gnuplot
tstbestcase.dat.tgz                     worst.c
tstbestcase_memory.gnuplot
$ 

Если я наберу make malloc, я получу этот вывод, который я не понимаю:

$ make malloc
gcc -DSTRATEGY=4 -DNRQUICKLISTS=6   -o malloc malloc.c 
/usr/lib/crt0.o: In function `_start':
(.text+0xa4): undefined reference to `main'
collect2: ld returned 1 exit status
*** Error 1 in /home/niklas/malloc-master (<sys.mk>:85 'malloc')
$ 

person Niklas R.    schedule 31.08.2015    source источник
comment
Что значит ничего не происходит? Что-то должно произойти. Вы получаете ошибку? Вы вообще получаете какой-то результат? Вы добираетесь до следующей подсказки? Корпус висит? Имя этого файла Makefile? Какую версию make вы используете?   -  person Etan Reisner    schedule 31.08.2015
comment
Я использую /usr/bin/make из OpenBSD 5.8. Он не зависает, он представляет новую подсказку без вывода компилятора. Makefile работает с Ubuntu.   -  person Niklas R.    schedule 31.08.2015
comment
Это удивительно. Какой код возврата при запуске make? (т. е. что выводит make; echo "$?"?) При этом похоже, что это make-файл GNU make, а make по умолчанию в openbsd определенно не GNU make, так что, скорее всего, это не сработает.   -  person Etan Reisner    schedule 31.08.2015
comment
Код возврата 0 при запуске make; echo "$?"   -  person Niklas R.    schedule 31.08.2015
comment
Делает ли make -f Makefile что-то другое? gmake работает?   -  person Etan Reisner    schedule 31.08.2015
comment
код возврата 0 из запуска make -f Makefile; echo "$?". В системе нет gmake.   -  person Niklas R.    schedule 31.08.2015
comment
Я не могу понять, что там делает BSD make. Я ожидал ошибку или что-то в этом роде. Это действительно озадачивает. При этом либо установите GNU make/gmake, либо перепишите make-файл для BSD make, и все должно работать.   -  person Etan Reisner    schedule 31.08.2015
comment
Кажется, он запускается, если я набираю make malloc, тогда он начинает компилироваться, но выдает сообщение об ошибке, которое я не могу понять. Я обновил вопрос с этим сообщением об ошибке.   -  person Niklas R.    schedule 31.08.2015


Ответы (1)


Это GNUmakefile. pkg_add gmake, а затем введите gmake или перепишите Makefile для работы под make.

person thrig    schedule 31.08.2015