How frequently does the letter "o" appear in:
Q: Syntax error: end of file unexpected Имею следующий Makefile:
./object_files/server.o: ./source_files/server.c ./header_files/server.h
    if which gcc 
    then
    gcc -c ./source_files/server.c
    mv ./server.o ./object_files/server.o
    elif which clang
    then
    clang -c ./source_files/server.c
    mv ./server.o ./object_files/server.o
    else    
    echo -e "\033[31m\033[5mPlease, install a compilar for C language such as gcc or clang!!!\033[0m\n"
    fi

./executable_files/server: ./object_files/server.o
    if which gcc
    then
    gcc -o ./executable_files/server  ./object_files/server.o
    elif which clang
    then
    clang -o ./executable_files/server ./object_files/server.o
    else
    echo -e "\033[31m\033[5mPlease, install a compilar for C language such as gcc or clang!!!\033[0m\n"
    fi

Вывод консоли:
if which gcc 
/bin/sh: 1: Syntax error: end of file unexpected (expecting "then")
make: *** [Makefile:2: object_files/server.o] Error 2


A: Каждая строчка в мейкфайле выполняется как отдельная команда, за
исключением случаев, когда конец предыдущей экранирован.  Так что:
./object_files/server.o: ./source_files/server.c ./header_files/server.h
  if which gcc;\
  then\
    gcc -c ./source_files/server.c;\
    mv ./server.o ./object_files/server.o;\
  elif which clang;\
  then\
    clang -c ./source_files/server.c;\
    mv ./server.o ./object_files/server.o;\
  else\   
    echo -e "\033[31m\033[5mPlease, install a compilar for C language such as gcc or clang!!!\033[0m\n";\
  fi
Я лично всегда подобные вещи просто кладу в отдельный скрипт.

A: *

*в программировании считается хорошим тоном переиспользовать существующий код

*к чему все эти манипуляции с подкаталогами? kiss вроде никто пока не отменял. у программы gnu/make по этому поводу есть удобная «магия».

если избавиться от дублирования кода и поместить файлы server.c и server.h в текущий каталог, то ровно той же функциональности можно добиться гораздо более лаконичным (а потому проще поддерживаемым) кодом:
CC = $(shell command -v gcc || command -v clang)
ifeq ($(CC),)
$(error Please, install a compilar for C language such as gcc or clang!!!)
endif

server:

server.o: server.c server.h


p.s. подробнее о применённой «магии» (или в первоисточнике: implicit rules).

user
There are 56 "o"s.
assistant