自定义make命令

时间:2012-10-20 21:33:22

标签: c

我想知道如何而不是运行

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):

我已经搜索了谷歌一段时间,现在试图找到这个问题的答案,但仍然没有运气。

2 个答案:

答案 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'时正确调用要运行的命令。