2012-10-20 103 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」時正確調用要運行的命令。