我想知道如何而不是运行
gcc -std=c99 foo.c -o foo -lcs50
我可以跑
make foo
问题在于,当我只用make
命令尝试时,它会说
cc foo.c -o foo
Undefined symbols for architecture x86_64:
"_GetString", referenced from:
_main in crypto-6PNyQP.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [crypto] Error 1
但是当我使用gcc
命令包含其他标志时,它可以正常工作。我正在上网,他们只能输入make foo
,他们的输出将是
jharvard@appliance (~/Desktop): make foo
gcc -ggdb -std=c99 -Wall -Werror foo.c -lcrypt -lcs50 -lm -o foo
jharvard@appliance (~/Desktop):
我已经搜索了谷歌一段时间,现在试图找到这个问题的答案,但仍然没有运气。
答案 0 :(得分:2)
使用GNU make
:
make CFLAGS=-std=c99 LDLIBS=-lcs50 foo
或者将这些宏放入2行makefile
:
CFLAGS = -std=c99
LDLIBS = -lcs50
对于您在上一个示例中显示的更复杂的选项:
CFLAGS = -ggdb -std=c99 -Wall -Werror
LDLIBS = -lcrypt -lcs50 -lm
使用这样的makefile
,您可以使用以下内容从单个源文件xyz
构建任何程序xyz.c
:
make xyz
当您需要从多个源文件创建程序时,您需要更复杂的makefile
。
答案 1 :(得分:0)
有一个讨论板(可通过谷歌小组加入),专门回答有关CS50设备配置的问题,这是我假设您正在运行,因为您正在使用哈佛CS50在线。
Box中的CS50(设备)应该配置为当你输入make时,“正确”的事情发生在前几个家庭作业中,这样你就不必立即担心编译的细节了。
但是,如果它似乎不起作用,你可以向我上面提到的小组发帖提问,“cs50-discuss”。 如果你(不经理)使用你自己的设置而不是设备,你可以简单地搜索如何制作一个'Makefile',即运行它时程序'make'读取的文本文件。拥有Makefile将允许您确保在调用'make'时正确调用要运行的命令。