天天看點

最簡單的通用Makefile

         所謂通用,就是很多情況都适用的Makefile,在這個Makefile中你不用去理會哪個檔案的編譯又要與哪些頭檔案相關這些東東,它自己會自動幫你相關起來,你隻要把你的源代碼放在一起,它就自動幫你編譯好了。我自己都在用,覺得很好用,是以介紹一下呵呵^_^

1. 通用的c項目

TARGET = //目标,即生成的可執行檔案的名字,如test

PREFIX_BIN = //執行sudo make install後你的可執行檔案放的位置,如/usr/bin

CC = gcc

INCLUDES = //你要包含的頭檔案所在的地方

LIBS = //你要用到的庫函數所在的地方

CFLAGS =-Wall -Werror

LINKFLAGS = //沒用過,我一般留白。

C_SOURCES = $(wildcard *.c)

C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))

.c.o:

       $(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c

compile: $(C_OBJS)

       $(CC)     $(LINKFLAGS) -o $(TARGET) $^ $(LIBS)

clean:

       rm -f $(C_OBJS)

       rm -f $(TARGET)

install: $(TARGET)

       cp $(TARGET) $(PREFIX_BIN)

uninstall:

       rm -f $(PREFIX_BIN)/$(TARGET)

rebuild: clean compile

後面的C++項目與C項目基本相同,就不多說了呵呵^_^

2. 通用的c++項目

TARGET =

PREFIX_BIN =

CC = gcc

CXX = g++

INCLUDES =

LIBS =

CFLAGS = -Wall -Werror

LINKFLAGS =

C_SOURCES = $(wildcard *.c)

C_OBJS = $(patsubst %.c, %.o, $(C_SOURCES))

CPP_SOURCES = $(wildcard *.cpp)

CPP_OBJS = $(patsubst %.cpp, %.o, $(CPP_SOURCES))

.c.o:

       $(CC) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.c

.cpp.o:

       $(CXX) -c -o $*.o $(CFLAGS) $(INCLUDES) $*.cpp

compile: $(CPP_OBJS) $(C_OBJS)

       $(CXX) $(LINKFLAGS) -o $(TARGET) $^ $(LIBS)

clean:

       rm -f $(CPP_OBJS) $(C_OBJS)

       rm -f $(TARGET)

install: $(TARGET)

       cp $(TARGET) $(PREFIX_BIN)

uninstall:

       rm -f $(PREFIX)/$(PREFIX_BIN)

rebuild: clean compile