【发布时间】:2018-02-28 23:43:57
【问题描述】:
简介
我已经开始关注Unix Network programming 2003这本书了。我在这里从官网下载了源代码:source code。这包括一个 README 文件,它告诉您如何构建/编译本书中包含的所有文件。
我在这个 GitHub 页面(也有源代码)github 上按照这些说明进行操作,并设法使用 make 文件并成功配置源代码。
Makefile 编译提供的示例
程序示例的第一章在下面突出显示的目录中。 我的程序是 '[BOOK]daytimetcpcli.c' 并将其放在提供的 Makefile 中。 Makefile 目标目录内:
unpv13e/intro$
(包括所有其他书籍示例程序)
include ../Make.defines
PROGS = [BOOK]daytimetcpcli.c daytimetcpcli1 daytimetcpcli2 daytimetcpcli3 \
daytimetcpsrv daytimetcpsrv1 daytimetcpsrv2 daytimetcpsrv3 \
daytimetcpcliv6 daytimetcpsrvv6 \
byteorder
all: ${PROGS}
[BOOK]daytimetcpcli: [BOOK]daytimetcpcli.o
${CC} ${CFLAGS} -o $@ [BOOK]daytimetcpcli.o ${LIBS}
daytimetcpcli1: daytimetcpcli1.o
${CC} ${CFLAGS} -o $@ daytimetcpcli1.o ${LIBS}
daytimetcpcli2: daytimetcpcli2.o
${CC} ${CFLAGS} -o $@ daytimetcpcli2.o ${LIBS}
daytimetcpcli3: daytimetcpcli3.o
${CC} ${CFLAGS} -o $@ daytimetcpcli3.o ${LIBS}
daytimetcpsrv: daytimetcpsrv.o
${CC} ${CFLAGS} -o $@ daytimetcpsrv.o ${LIBS}
daytimetcpsrv1: daytimetcpsrv1.o
${CC} ${CFLAGS} -o $@ daytimetcpsrv1.o ${LIBS}
daytimetcpsrv2: daytimetcpsrv2.o
${CC} ${CFLAGS} -o $@ daytimetcpsrv2.o ${LIBS}
daytimetcpsrv3: daytimetcpsrv3.o
${CC} ${CFLAGS} -o $@ daytimetcpsrv3.o ${LIBS}
daytimetcpcliv6: daytimetcpcliv6.o
${CC} ${CFLAGS} -o $@ daytimetcpcliv6.o ${LIBS}
daytimetcpsrvv6: daytimetcpsrvv6.o
${CC} ${CFLAGS} -o $@ daytimetcpsrvv6.o ${LIBS}
byteorder: byteorder.o
${CC} ${CFLAGS} -o $@ byteorder.o ${LIBS}
clean:
rm -f ${PROGS} ${CLEANFILES}
问题
我将我的文件放在 Makefile 中。但是,当我再次运行“make”时。发生这种情况:
make:“所有”都无事可做。
我也尝试过使用 GCC 进行正常编译:
gcc [BOOK]daytimetcpcli.c
致命错误:unp.h:没有这样的文件或目录
所以我的问题是如何使用提供的 Makefile 编译我的程序?我做对了吗?而且我知道我可以用 GCC 编译,但是我不知道包含 GCC 所需的头文件的语法。这就是为什么我试图用 Makefile 来做这件事。
接下来的第二个问题是,如何在没有 makefile 的情况下进行编译? (使用带有正确 -I headers 的 gcc)? gcc program.c -I unp.h ?
*Note '[BOOK]daytimetcpcli.c' = daytimetcpcli.c 在官网提供的源码中,在源码中。
【问题讨论】:
-
你直接编译的时候明显少了头文件。文件 Make.defines 正在设置 CFLAGS 以便它可以找到它。我对
[BOOK]字符感到惊讶,方括号对外壳来说是特殊的。尝试改用下划线或完全删除它们。 -
@icarus 注意到并纠正了谢谢,我不知道。