Makefile用文件夹编译共享库

时间:2016-09-06 13:09:14

标签: c linux 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 $@ $^ $(LDFLAGS)                                                   

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

但我得到提示:

  

制作:***没有规则要制作目标' X1.o',需要   ' libX.so'

我觉得我没有使用$ SRC和$ OUTDIR,这是显而易见的

1 个答案:

答案 0 :(得分:1)

所以我终于明白了。 不是我害怕的最聪明的方式。

生成文件

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 $@ $< $(CFLAGS)

libX.so: $(OBJ)
        gcc -o $(ODIR)/$@ $^ $(CFLAGS) $(LDFLAGS)

.PHONY: clean

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

我还不确定一些陈述:/但它有效