如何创建 Makefile 以正确编译我的 C 代码?
How can I create a Makefile to compile my C code correctly?
问题是当我在终端中直接使用 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 一起工作。我该怎么办?
How can I create a Makefile to compile my C code correctly?
你需要一个source code editor (e.g. emacs
) which knows the peculiarities of Makefile
s特别是tab字符的奇怪角色。
CFLAGS=-c -o
这可能是错误的。您可能需要 CFLAGS= -g -Wall
来代替。提示:运行 make -p
了解 make
的内置规则并加以利用。
WEBSERVERINIT_SOURCE=./include/webserverinit.c
这看起来很奇怪(我猜你应该用 src
替换 include
)。
首先,您需要阅读文档。特别是,大约 invoking GCC on the command line, and later read the GNU make
documentation。 花几个小时阅读每一个。
然后,您可能希望将 -v
和 -H
标志用于 gcc
。两者都有帮助。
最后,您应该使用 remake:它是 make
的改进变体(旨在简化 Makefile
的调试)。您将与 -x
标志一起使用它。
问题是当我在终端中直接使用 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 一起工作。我该怎么办?
How can I create a Makefile to compile my C code correctly?
你需要一个source code editor (e.g. emacs
) which knows the peculiarities of Makefile
s特别是tab字符的奇怪角色。
CFLAGS=-c -o
这可能是错误的。您可能需要 CFLAGS= -g -Wall
来代替。提示:运行 make -p
了解 make
的内置规则并加以利用。
WEBSERVERINIT_SOURCE=./include/webserverinit.c
这看起来很奇怪(我猜你应该用 src
替换 include
)。
首先,您需要阅读文档。特别是,大约 invoking GCC on the command line, and later read the GNU make
documentation。 花几个小时阅读每一个。
然后,您可能希望将 -v
和 -H
标志用于 gcc
。两者都有帮助。
最后,您应该使用 remake:它是 make
的改进变体(旨在简化 Makefile
的调试)。您将与 -x
标志一起使用它。