我需要编写一个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,这是显而易见的
答案 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)/*~
我还不确定一些陈述:/但它有效