Makefile - 每次编译所有文件

时间:2014-04-30 07:23:24

标签: linux makefile gnu-make

这是我用来构建库的makefile。它运作良好。但它总是重新编译所有文件。我已宣布.PHONY。问题仍然存在。

PROGRAM=mylib


[...]
OBJS= dir/file1.o \
          dir/file2.o

SRC= $(addprefix dir/,$(OBJS))

.PHONY: all clean install
all: ${SRC}
    ${CC} --shared -o lib${PROGRAM}.so ${OBJS}

%.o: %.c
    ${CC} -c ${MY_CFLAGS} $*.c ${INCLUDES}

如果我的Makefile有任何重大问题,请发表评论。

文件树如下:

my_lib
├── include
│   ├── file1.h
└── src
    ├── file1.c
    ├── file2.c

1 个答案:

答案 0 :(得分:1)

您的SRC_FILES包含src/file1.osrc/file2.o,依此类推。这很可能不是你想要的。通过执行此操作以及通用.c到.o规则中的$*.c,您将破坏make's文件规则依赖性自动化。

我会像这样重写你的Makefile:

[..]

all: lib${PROGRAM}.so     # create dependency from all to your .so

lib${PROGRAM}.so: ${OBJECT_FILES}     # create a dep for your .so to all object files
     ${CC} ${SHARED_FLAGS} -o lib${PROGRAM}.so ${OBJECT_FILES}

%.o: %.c  # generic rule to build .o from .c
     $(CC) -c -o $@ $< $(MY_CFLAGS)
如果file1.c位于src /

中,

$ {OBJECT_FILES}必须包含src / file1.o

通用规则需要与.c文件位于同一目录中的.o。