【发布时间】:2012-09-24 12:54:53
【问题描述】:
我正在运行一个没有问题的简单 Makefile:
CC=gcc
CFLAGS= -std=c99 -ggdb -Wall -I.
DEPS = hellomake.h
OBJ = hellomake.o hellofunc.o
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
hellomake: $(OBJ)
gcc -o $@ $^ $(CFLAGS)
文件在主项目的目录中:
./project/Makefile
./project/hellomake.c
./project/hellomake.h
然后我尝试整理文件,并放置如下内容:
./project/Makefile
./project/src/hellomake.c
./project/include/hellomake.h
和额外的子目录目录:
./project/lib
./project/obj
然后是新版本的Makefile:
IDIR =include
CC=gcc
CFLAGS= -std=c99 -ggdb -Wall -I$(IDIR)
ODIR=obj
LDIR =lib
LIBS=-lm
_DEPS = hellomake.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))
_OBJ = hellomake.o hellofunc.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
$(ODIR)/%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
hellomake: $(OBJ)
gcc -o $@ $^ $(CFLAGS) $(LIBS)
.PHONY: clean
clean:
rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~
我正在使用 Emacs 和 gcc 编译器在 Linux 上进行编译:
$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
然后,我在 Emacs 上运行:
<Esc>
x
compile
make
它给出了信息:
"./project/src/" -*-
make: *** No rule to make target `obj/hellomake.o', needed by `hellomake'. Stop.
Compilation exited abnormally with code 2 at Wed Oct 3 17:10:01
Makefile 文件中应该缺少什么规则?
非常感谢所有 cmets 和建议。
感谢您的建议,已添加到代码中。然后编译器报错:
make -k
make: *** No rule to make target `src/hellomake.c', needed by `obj/hellomake.o'.
make: *** No rule to make target `../include/hellomake.h', needed by `obj/hellomake.o'.
make: Target `obj/hellomake.o' not remade because of errors
其他建议?
提前致谢!
【问题讨论】:
-
project/obj会比project/src/obj更明智一点 -
你好史蒂夫-o。谢谢!我做了你建议的改变。
标签: c compilation compiler-errors makefile