Как я могу создать Makefile для правильной компиляции кода C? - PullRequest
0 голосов
/ 03 июля 2019

Проблема в том, что мой веб-сервер работает нормально, когда я компилирую код в терминале, используя gcc напрямую:

gcc webserver.c ../include/webserverinit.c ../include/webserver_request_response.c -o webserver

но после использования Makefile код не работает нормально. Я не получаю никакой ошибки, но одна из функций работает неправильно

Я не понимаю, что здесь происходит. Я знаю, что мой код в порядке, и чтобы убедиться, что Makefile работает нормально, я также использовал генератор Makefile, но он все тот же.

Я знаю, что мой код в порядке, и чтобы убедиться, что Makefile работает нормально, я также использовал генератор Makefile, но он все тот же

Makefile, который я использую:

CC=gcc
WEBSERVER_OBJECT=./objects/webserver.o
WEBSERVER_SOURCE=./src/webserver.c
WEBSERVERINIT_OBJECT=./objects/webserverinit.o #Library to start the webserver and listening on the port
WEBSERVERINIT_SOURCE=./include/webserverinit.c
WEBSERVERINIT_HEADER=./include/webserverinit.h
WEBSERVER_REQUEST_RESPONSE_OBJECT=./objects/webserver_request_response.o #Library for receiving requests and sending respons
WEBSERVER_REQUEST_RESPONSE_SOURCE=./include/webserver_request_response.c
WEBSERVER_REQUEST_RESPONSE_HEADER=./include/webserver_request_response.h
OBJECTS=./objects/webserver.o ./objects/webserverinit.o ./objects/webserver_request_response.o #objects folder
HEADERS=./include/webserverinit.h ./include/webserver_request_response.h #headers
OBJECTDIR=./objects

webserver: ${OBJECTS}
    ${CC} ${OBJECTS} -o webserver

${WEBSERVER_OBJECT}: ${WEBSERVER_SOURCE} ${HEADERS}
    ${CC} -c  ${WEBSERVER_SOURCE} -o ${WEBSERVER_OBJECT}

${WEBSERVERINIT_OBJECT}: ${WEBSERVERINIT_SOURCE} ${WEBSERVERINIT_HEADER}
    ${CC} -c ${WEBSERVERINIT_SOURCE} -o ${WEBSERVERINIT_OBJECT}   

${WEBSERVER_REQUEST_RESPONSE_OBJECT}: ${WEBSERVER_REQUEST_RESPONSE_SOURCE} ${WEBSERVER_REQUEST_RESPONSE_HEADER}
    ${CC} -c ${WEBSERVER_REQUEST_RESPONSE_SOURCE} -o ${WEBSERVER_REQUEST_RESPONSE_OBJECT} 
clean:
    rm -rf ${OBJECTDIR}/*.o webserver

Я хочу, чтобы мой код также работал с Makefile, но он не работает с Makefile. Что мне делать?

1 Ответ

1 голос
/ 03 июля 2019

Как я могу создать Makefile для правильной компиляции моего кода C?

Вам нужен редактор исходного кода (например, emacs), который знает особенности Makefile s , в частности странную роль tab символов в них.

CFLAGS=-c -o

Это, вероятно, неправильно. Вы могли бы хотеть CFLAGS= -g -Wall вместо этого. Подсказка: запустите make -p, чтобы понять встроенные правила make и воспользоваться ими.

WEBSERVERINIT_SOURCE=./include/webserverinit.c

И это выглядит странно (я думаю, вам следует заменить include на src).


Сначала вам нужно прочитать документацию . В частности, о , вызывающем GCC в командной строке, а затем о прочтении GNU make документации . Потратьте несколько часов, чтобы прочитать каждый из них.

Затем вы можете использовать флаги -v и -H для gcc. Оба полезны.

Наконец, вы должны использовать римейк : это улучшенный вариант make (разработанный для облегчения отладки вашего Makefile). Вы будете использовать его с флагом -x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...