用于链接cs50库(您应该从中安装) https://github.com/cs50/libcs50 根据那里的说明,你的链接命令应该指定 -lcs50 论点。
-lcs50
make 通常需要一个 Makefile 控制构建。在它缺席的情况下,它可以使用一些隐式规则来猜测构建过程 hello.o 可以建立 hello.c 和 hello 可以联系起来 hello.o 等等,但它当然无法猜测 libcs50 应该链接在一起。
make
Makefile
hello.o
hello.c
hello
libcs50
幸运的是,隐式链接规则包括变量的内容 LDLIBS 在正确的,所以你可以通过写一个简单的解决方案 Makefile 在同一目录中,只包含
LDLIBS
LDLIBS += -lcs50
即“追加字符串 -lcs50 到当前的价值 LDLIBS ”。
之后 make hello 将使用隐式规则 和 新的价值 LDLIBS 执行
make hello
cc hello.c -lcs50 -o hello
也请注意 cc 命令通常是GCC,而不是Clang,而不是它在CS50中应该重要。它可以配置 CC 变量 Makefile :
cc
CC
CC := clang
最后,启用警告和迂腐是有意义的 汇编 标志,例如:
CFLAGS += -Wall -Wextra -Werror -pedantic -std=c11
所有这3个存在, make hello 将实际执行
clang -Wall -Wextra -Werror -pedantic -std=c11 hello.c -lcs50 -o hello
这意味着我们确实节省了很多打字并获得了更多有用的诊断!
当然,对于更复杂的构建过程,您需要编写更复杂的内容 Makefile 依赖规则 - 如果你的 helloworld 程序包括 hello.c 和 world.c 链接在一起你可以通过隐式规则获得并只是声明 helloworld 取决于两者 hello.o 和 world.o 并应从这些链接在一起:
helloworld
world.c
world.o
helloworld: hello.o world.o (CC) $(LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) # the command must be indented by a *single* tab character, not spaces