2013-02-02 45 views
0

所以我有三個文件:使用Makefile中使用C

jarvismarch.c (includes "jarvismarchtools.h") 
jarvismarchtools.c 
jarvismarchtools.h 

我想用一個makefile編譯上述文件。我會怎麼做呢?

回答

2

典型的簡單的Makefile看起來是這樣的:

OBJ = jarvismarch.o jarvismarchtools.o 

all: $(OBJ) 
     $(CC) -o jarvismarch $(OBJ) 

考慮的asveikau的意見考慮在內,並加入乾淨的目標就變成:

OBJ = jarvismarch.o jarvismarchtools.o 
BIN = jarvismarch 

CFLAGS = -Wall -pedantic -ansi 

all: $(BIN) 

$(BIN): $(OBJ) 
    $(CC) -o @ $(OBJ) 

clean: 
    rm -f $(OBJ) $(BIN) 

(Windows用戶需要使用.obj代替.o

我強烈建議不要使用make。開始時可能很簡單,但是一旦您的項目增長,我強烈建議使用更完整的構建工具,如SCons,CMakeBoost.Build

+1

我實際上會讓'all'依賴於'jarvismarch'並且有一個新的'jarvismarch:$(OBJ)'目標,然後使用'-o @'而不是'-o jarvismarch'。 – asveikau

+0

@asveikau同意。我還添加了一個乾淨的目標,並將二進制文件的名稱放在BIN變量中。一切從那裏只是添加各種CFLAGS,LIBS等變量。 – bikeshedder

+0

我剛加了一些CFLAGS到Makefile例子中:通常你至少要使用'-Wall','-pedantic'和'-ansi'。 (這些取決於你正在使用的編譯器,列出的標誌是GCC) – bikeshedder

1

假設你正在試圖建立jarvismarch.exe:

jarvismarch.exe : jarvismarch.o jarvismarchtools.o 
    $(CC) -o [email protected] $^ 

第二行以空格開頭必須是製表符。