2016-09-06 152 views
0

共享庫我需要寫一個Makefile編譯下一個項目:Makefile進行編譯的文件夾

project 
    \_ src 
     \_ *.c 
    \_ include 
     \_ *.h 
    \_ build 
     \_ Makefile 
    \_ obj 
     \_ output_library.so 

我是新來的Makefile的語言,現在我在同一目錄下的所有文件,並進行編譯這個Makefile:

SRC=../src                  
OUTDIR=../obj  
CFLAGS=-ggdb -O1 -fPIC -Wall                             
LDFLAGS=-shared -ggdb -fPIC -Wall                           
all: libX.so                             

libX.so: X1.o X2.o X3.c                 
    $(CC) -o [email protected] $^ $(LDFLAGS)             

clean:                   
    rm *.so *.o || true 

,但我得到提示:

化妝:***沒有規則,使目標的X1.o「,由所需'libX.so'。

什麼是明顯,因爲我覺得我沒有利用$ SRC和$ OUTDIR

+0

什麼是你其實是問?該問題包含詳細信息,但我找不到任何關於實際問題的描述。 – Cubic

+0

[使用GNU make構建源代碼樹的C程序]的可能重複(http://stackoverflow.com/questions/39015453/building-c-program-out-of-source-tree-with-gnu-令) – Tim

+0

(你可以找到所有你在我的Q的答案需要什麼/ A以上的聯繫。這也許有點複雜,但你應該能夠以使其適應你的結構) – Tim

回答

1

所以,我終於得到它。 不是我害怕的最聰明的方式。

的Makefile

SRC=../src 
IDIR =../include 
OUTDIR=../obj 
CC=cc 
CFLAGS=-I$(IDIR) 
LDFLAGS=-shared -ggdb -fPIC -Wall -lnsl 

ODIR=../obj 
#LDIR =../lib 

_DEPS = header.h 
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) 

_OBJ = X1.o X2.o X3.o 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) 


$(ODIR)/%.o: $(SRC)/%.c $(DEPS) 
     $(CC) -c -o [email protected] $< $(CFLAGS) 

libX.so: $(OBJ) 
     gcc -o $(ODIR)/[email protected] $^ $(CFLAGS) $(LDFLAGS) 

.PHONY: clean 

clean: 
     rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ 

我不知道有關的一些語句反正:/,但它的工作原理