2011-05-16 85 views
1

這是在C中,我通過Putty運行UNIX並希望創建一個Makefile。有人可以告訴我如何創建這個非常簡單的makefile嗎?

所以我有一個程序只在一個文件「recommender.c」中,我需要make一個makefile來創建一個名爲recommender的可執行文件,使用all函數。我不知道怎麼做的部分是我編譯recommender.c使用行gcc recommender.c -std = gnu99 我不知道如何確保它也執行-std = gun99部分。請幫忙? :)

回答

4
CFLAGS=-std=gnu99 -Wall -Wextra -O3 

all: recommender 

recommender: recommender.o 

注意文件擴展名必須是.c如果有擴展.cpp它需要的CXXFLAGS代替CFLAGS

了一些解釋:

make文件是基於依賴你可以看到你可以在make文件的頂部設置你的變量。然後當make程序被調用時,它將在當前目錄中搜索Makefile

由於默認操作是all它將搜索所有規則。 當它找到all規則時,它將檢查在這種情況下規則/文件需要哪些依賴項,以便它再次開始搜索規則,並且它發現它需要規則/文件recommender.o,但它現在找不到任何規則/文件是魔法發生的地方。

make足夠聰明地知道.o(對象)文件是由.c或.cpp(源)文件製作的,現在它將開始搜索當前目錄中的源文件。他通過用.c代替.o來做到這一點,如果它找到將用gcc編譯器編譯它的文件,如果它在哪裏找到.cpp文件,它將用g ++編譯器編譯它。

所以現在我們知道了這一點,我們可以通過添加更多的對象文件作爲依賴項來簡單地將多個源文件添加到項目中。

現在你並不真的需要首先創建一個對象文件,因爲你從一個源文件編譯,你還可以刪除recommender: recommender.o規則,並會嘗試通過編譯recommender.c.cpp

3

您創建recommender應用甚至不需要makefile; CFLAGS="-std=gnu99" make recommender應該「只是工作」。

+3

但是'Makefile'對於永遠不會忘記'CFLAGS'是非常有幫助的。 :) – sarnold 2011-05-16 23:55:02

+0

不妨直接輸入編譯命令即可;你甚至不需要那麼做。 – eriktous 2011-05-17 11:05:16

相關問題