2012-10-20 66 views
1

我想知道我怎样,而不是运行自make命令

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输入和输出将是

[email protected] (~/Desktop): make foo 
gcc -ggdb -std=c99 -Wall -Werror foo.c -lcrypt -lcs50 -lm -o foo 
[email protected] (~/Desktop): 

我已搜查谷歌,而现在试图找到这个问题的答案,但仍然没有运气。

+1

你有一个makefile吗?你能证明吗?如果不是,写一个是一个好的开始! – Joe

+0

你的makefile的外观如何?你能编辑你的问题来包含它吗? –

+0

我在哪里可以找到我以前没有做过的makefile。 – Yamaha32088

回答

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,你可以建立任何公关ogram xyz使用只是一个单一的源文件xyz.c

make xyz 

当你需要创建从多个源文件的程序,你需要一个更复杂的makefile

+0

谢谢,这正是我所需要的 – Yamaha32088

0

有一个讨论板(可通过谷歌小组加入),专门回答有关CS50设备配置的问题,这是我假设您在线上学习哈佛CS50时所运行的问题。

在一箱(家电)CS50应配置,这样当你键入make,在最初的几个家庭作业“正确”的事情发生,使你不必担心的汇编权的细节远。

但是,如果它似乎不工作,您可以向我上面提到的组“cs50-discuss”发布问题。 如果您是(无意)使用您自己的设置而不是设备,那么您可以简单地搜索如何创建'Makefile',即运行时由程序'make'读取的文本文件。使用Makefile将允许您确保在调用“make”时正确调用要运行的命令。