所以我有三個文件:使用Makefile中使用C
jarvismarch.c (includes "jarvismarchtools.h")
jarvismarchtools.c
jarvismarchtools.h
我想用一個makefile
編譯上述文件。我會怎麼做呢?
所以我有三個文件:使用Makefile中使用C
jarvismarch.c (includes "jarvismarchtools.h")
jarvismarchtools.c
jarvismarchtools.h
我想用一個makefile
編譯上述文件。我會怎麼做呢?
典型的簡單的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,CMake或Boost.Build。
假設你正在試圖建立jarvismarch.exe:
jarvismarch.exe : jarvismarch.o jarvismarchtools.o
$(CC) -o [email protected] $^
第二行以空格開頭必須是製表符。
我實際上會讓'all'依賴於'jarvismarch'並且有一個新的'jarvismarch:$(OBJ)'目標,然後使用'-o @'而不是'-o jarvismarch'。 – asveikau
@asveikau同意。我還添加了一個乾淨的目標,並將二進制文件的名稱放在BIN變量中。一切從那裏只是添加各種CFLAGS,LIBS等變量。 – bikeshedder
我剛加了一些CFLAGS到Makefile例子中:通常你至少要使用'-Wall','-pedantic'和'-ansi'。 (這些取決於你正在使用的編譯器,列出的標誌是GCC) – bikeshedder