如何创建Makefile正确编译我的C代码?

时间:2019-07-03 19:34:42

标签: c makefile webserver

问题是当我直接使用gcc在终端中编译代码时,我的Web服务器工作正常:

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 个答案:

答案 0 :(得分:1)

  

如何创建Makefile来正确编译我的C代码?

您需要一个source code editor(例如emacs)来了解Makefiles的特殊性,尤其是其中 tab 字符的怪异角色。

  

CFLAGS=-c -o

这可能是错误的。您可能需要CFLAGS= -g -Wall。提示:运行make -p来了解make的内置规则并加以利用。

  

WEBSERVERINIT_SOURCE=./include/webserverinit.c

这看起来很奇怪(我想您应该将include替换为src)。


首先,您需要阅读文档。特别是,在命令行上约invoking GCC,然后再阅读GNU make documentation花几个小时阅读它们中的每一个。

然后,您可能想对-v使用-Hgcc标志。两者都是有帮助的。

最后,您应该使用remake:它是make的改进版本(旨在简化Makefile的调试)。您可以将其与-x标志一起使用。