我的makefile正在编译write_time.o,虽然我没有给它任何规则。但是,当我为它编写规则时,它不会编译。任何有关可能导致此问题的建议?下面是我的makefile:makefile编译没有规则的目标文件
INCLUDES = -I../include -I/opt/local/include
CC = gcc
OBJS = image_io.o xcorr.o textfile_io.o main.o array_processing.o \
fit2d.o poly.o mattran.o matsolve.o nelder_mead.o process.o \
open_seq_file.o write_time.o close_seq_file.o
DEBUGS = -g
CFLAGS = $(INCLUDES) -Wall -O2 $(DEBUGS)
DESTDIR = ../bin
LDFLAGS = -L. -L/opt/local/lib -ltiff -lm -L../lib -lmatrix ../include/seq_io.h
DEPS = ../include/file_io.h ../include/corr.h \
../include/matrix.h /opt/local/include/tiffio.h \
/opt/local/include/tiff.h ../include/seq_io.h
#../include/nmsimplex.h
all: $(DESTDIR)/main
image_io.o: image_io.c ../include/file_io.h /opt/local/include/tiffio.h \
/opt/local/include/tiff.h
$(CC) $(CFLAGS) -o [email protected] -c $<
xcorr.o: xcorr.c ../include/file_io.h
$(CC) $(CFLAGS) -o [email protected] -c $<
textfile_io.o: textfile_io.c ../include/file_io.h
$(CC) $(CFLAGS) -o [email protected] -c $<
array_processing.o: array_processing.c ../include/file_io.h
$(CC) $(CFLAGS) -o [email protected] -c $<
fit2d.o: fit2d.c ../include/matrix.h
$(CC) $(CFLAGS) -o [email protected] -c $<
poly.o: poly.c ../include/corr.h
$(CC) $(CFLAGS) -o [email protected] -c $<
nelder_mead.o: nelder_mead.c ../include/corr.h
$(CC) $(CFLAGS) -o [email protected] -c $<
# nmsimplex.o: nmsimplex.c ../include/nmsimplex.h
# $(CC) $(CFLAGS) -o [email protected] -c $<
process.o: process.c ../include/corr.h
$(CC) $(CFLAGS) -o [email protected] -c $<
mattran.o: mattran.c ../include/matrix.h
$(CC) $(CFLAGS) -o [email protected] -c $<
matsolve.o: matsolve.c ../include/matrix.h
$(CC) $(CFLAGS) -o [email protected] -c $<
open_seq_file.o: open_seq_file.c ../include/seq_io.h
$(CC) $(CFLAGS) -o [email protected] -c $<
close_seq_file.o: close_seq_file.c ../include/seq_io.h
$(CC) $(CFLAGS) -o [email protected] -c $<
main.o: main.c ../include/file_io.h ../include/nmsimplex.h ../include/corr.h ../include/seq_io.h
$(CC) $(CFLAGS) -o [email protected] -fopenmp -c $<
$(DESTDIR)/main: $(OBJS)
$(CC) -o [email protected] -fopenmp $^ $(LDFLAGS)
.PHONY: clean
clean:
rm -f *.o *~
这个编译好。但是,当我在补充:
write_time.o: write_time.c ../include/seq_io.h
$(CC) $(CFLAGS) -o [email protected] -c $<
我得到的错误:
make: *** No rule to make target `../include/seq_io.h', needed by `write_time.o'. Stop.
您缺少规则的缩进。另外,'make'为许多类型的文件(包括C文件)提供默认规则 - 这就是为什么它没有规则编译。 –
好的。那样做了,但是为什么在我不遵守规则时编译? – nineties
就像我说过的,如果在makefile中找不到任何明确声明的话,'make'会尝试几个默认规则。在这种情况下,它看到你要求'write_time.o',并且它看到'write_time.c'存在,所以它调用'cc write_time.c -o write_time.o'。 –