2

Нужно выполнить файл на сервере. Написал программу из нескольких модулей, но абсолютно ничего не знаю о составление makefile-ов.
Нашел готовый, который ровно подходит под мои нужды, только когда запускаю, пишет:

** * missing separator. Stop.

Может кто помочь за пару минут табуляцию правильно расставить и привести в рабочее состояние?

# Macros
CC = gcc
COMP_FLAG = -std=c99 -Wall -pedantic-errors -Werror -DNDEBUG
LIB_FLAG = -L. -lmtm
# Main target
tests: memcache_test my_set_test cache_test user_test

# Targets make <file>
user_test: user_test.o user.o
    $(CC) user_test.o user.o $(LIB_FLAG) -o $@

memcache_test: memcache_test.o memcache.o user.o cache.o
    $(CC) memcache_test.o memcache.o user.o cache.o $(LIB_FLAG) -o $@

cache_test: cache_test.o cache.o
    $(CC) cache_test.o cache.o $(LIB_FLAG) -o $@

my_set_test: my_set_test.o my_set.o
    $(CC) my_set_test.o my_set.o -o $@


# Targets make <file>_test.o
user_test.o: tests/user_test.c user.h tests/test_utilities.h map.h set.h
    $(CC) -c $(COMP_FLAG) $(LIB_FLAG) tests/$*.c

memcache_test.o: tests/memcache_test.c tests/test_utilities.h memcache.h map.h cache.h set.h list.h
    $(CC) -c $(COMP_FLAG) $(LIB_FLAG) tests/$*.c

cache_test.o: tests/cache_test.c cache.h tests/test_utilities.h set.h
    $(CC) -c $(COMP_FLAG) $(LIB_FLAG) tests/$*.c

my_set_test.o: my_set/my_set_test.c tests/test_utilities.h my_set/my_set.h
    $(CC) -c $(COMP_FLAG) $(LIB_FLAG) my_set/$*.c

# Targets make <file>.o
memcache.o: memcache.c memcache.h map.h cache.h list.h set.h user.h
    $(CC) -c $(COMP_FLAG) $(LIB_FLAG) $*.c

user.o: user.c user.h set.h map.h
    $(CC) -c $(COMP_FLAG) $(LIB_FLAG) $*.c

cache.o: cache.c cache.h set.h
    $(CC) -c $(COMP_FLAG) $(LIB_FLAG) $*.c

my_set.o: my_set/my_set.c my_set/my_set.h
    $(CC) -c $(COMP_FLAG) my_set/$*.c

# Target runs all test files
run: run_my_set_test run_cache_test run_memcache_test run_user_test

run_clean: clean run

run_my_set_test: my_set_test
./my_set_test

run_cache_test: cache_test
./cache_test

run_memcache_test: memcache_test
./memcache_test

run_user_test: user_test
./user_test

# Target remove all <*_test> and <*.o> files
clean: clean_o clean_test

clean_test:
rm -f *_test
clean_o:
rm -f *.o
Ilya.K.
  • 319

1 Answers1

2

там, где видите отступы от первой колонки, замените всё неотображаемое (до первого отображаемого символа) одним символом табуляции.

и во второй части у вас символы табуляция явно куда-то исчезли. привожу эту часть:

run_my_set_test: my_set_test
  ./my_set_test

run_cache_test: cache_test ./cache_test

run_memcache_test: memcache_test ./memcache_test

run_user_test: user_test ./user_test

Target remove all <_test> and <.o> files

clean: clean_o clean_test

clean_test: rm -f _test clean_o: rm -f .o


пишет:

** * missing separator. Stop.

обычно программа make сообщает ещё и номер строки, в которой обнаружена ошибка.

  • Благодарю, точно, не заметил. Исправил. Пишет: Nothing to be done for `makefile'.

    Насколько я понимаю, сам файл составлен правильно, теперь нужно разобраться с содержанием и с сутью его действа.

    – Ilya.K. Dec 27 '15 at 19:33
  • @Ilya.K., вы сначала запускаете программы, а потом разбираетесь, что же они должны делать? такой подход может привести к не очень хорошим последствиям. – aleksandr barakin Dec 27 '15 at 19:35
  • Ее написали для того же задания, как и мое. Уточню. Мы написали несколько модулей которые используются в главном модуле. Makefile составить как часть задания, который вроде бы должен все это дело запускать для автоматического теста. Поэтому названия модулей всех те же. Должно работать ) Разбираюсь на ходу. – Ilya.K. Dec 27 '15 at 19:39