2013-08-02 51 views
1

我的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. 
+1

您缺少规则的缩进。另外,'make'为许多类型的文件(包括C文件)提供默认规则 - 这就是为什么它没有规则编译。 –

+0

好的。那样做了,但是为什么在我不遵守规则时编译? – nineties

+2

就像我说过的,如果在makefile中找不到任何明确声明的话,'make'会尝试几个默认规则。在这种情况下,它看到你要求'write_time.o',并且它看到'write_time.c'存在,所以它调用'cc write_time.c -o write_time.o'。 –

回答

1

该错误可能意味着../include/seq_io.h不存在。您已将其列为依赖项,并且make坚持认为存在依赖关系,或者存在某种自动创建它们的方法。

+0

他在其他规则中使用了'../ include/seq_io.h',例如'open_seq_file.o'。我会冒险猜测这些规则的'.o'文件已经通过编译在不同的目录中存在。 OP可以做一个'make clean',然后'make'来查看当前目录中发生了什么? – unxnut

+0

@unxnut:问问OP,不是我:)。我同意,其他规则中依赖关系的存在表明其他规则尚未经过测试。 – rici

+0

Drew McGowen刚刚解决了这个问题。我以某种方式管理忘记缩进。当我彻底删除规则时,'make'会猜测我想如何编译write_time.o。 – nineties

相关问题