2015-05-03 118 views
0

這裏是我的makefile:如何在makefile中執行此操作?

BIN = ../mylib.a 
CXX = g++5 
CFLAGS = -O2 -pipe -mtune=i686 -g 
################################# 



default: 
    @echo 'Compiling socket' ;  $(CXX) $(CFLAGS) -c socket.c 
    @echo 'Compiling fdwatch';  $(CXX) $(CFLAGS) -c fdwatch.c 
    @echo 'Compiling signal' ;  $(CXX) $(CFLAGS) -c signal.c 
    @echo 'Compiling heart' ;  $(CXX) $(CFLAGS) -c heart.c 

    @echo 'Create library static'; ar cru $(BIN) *.o 
    @echo 'Compiling';    ranlib $(BIN) 
    @echo 'Delete .obj files';  rm -f *.o 

所以這是我的問題..

比方說,我有100個文件。我想編譯它們。

我在一個特定的文件中進行更改。 當我運行命令使所有這些文件從0。它重建必須等待,直到所有它重建。

現在我想問問他們如何能夠改變那上面的makefile來重新編譯那個文件改變了我。

+1

雖然這是一個功能性的生成文件,但它並沒有真正利用make的任何實際功能,例如依賴關係和單獨編譯。你在閱讀什麼文檔,建議你像這樣建立一個makefile? –

+0

呵呵,我從來沒有用過GNU make。 我讀了gnu make的文檔。是的,即功能這個makefile:D對我來說工作。 –

+0

它只需要一個小例子,我想不需要重新編譯所有的100個文件,只需要很小的改動。 :D –

回答

1

如何

.PHONY: all clean 

BIN = ../mylib.a 
CXX = g++5 
CFLAGS = -O2 -pipe -mtune=i686 -g 
################################# 

SOURCEFILES=socket.c fdwatch.c signal.c heart.c 

all: $(BIN) 

clean: 
    @echo Delete .obj files 
    @rm -f *.o 

%.o: %.c 
    @echo Compiling $* 
    @$(CXX) $(CFLAGS) -c $^ -o [email protected] 

$(BIN): $(SOURCEFILES:%.c=%.o) 
    @echo Create static library 
    @ar cru $(BIN) $^ 
    @echo Compiling 
    @ranlib $(BIN) 

+0

非常感謝,它工作。您可以重寫,以便將文件.o保存在特定的文件夾中。 –