我编写了一个简单的C ++程序,这是我第一次使用makefile
编译和链接它。作为一个挑战,我想制作一个makefile,它自己列出所有依赖项。我正在关注this教程。我的计划包括main.cpp
,ext1.cpp
和ext1.h
。在本教程之后,我有以下makefile
VPATH = src include
CPPFLAGS = -o include
CC = gcc
SOURCES = main.cpp \
ext1.cpp
-include $(subst .c,.d,$(SOURCES))
%.d: %.c
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
当我运行此消息时,我收到消息:make: *** No targets specified and no makefile found. Stop.
我不清楚我的情况中缺少什么?
答案 0 :(得分:2)
你试图一次做太多。
步骤1。您的第一个makefile应该构建可执行文件,而不用尝试自动依赖项检测。
VPATH = include src
CPPFLAGS += -Iinclude
CC = gcc
exec: main.o ext1.o
$(CC) $^ -o $@
%.o: %.cc
$(CC) -c $(CPPFLAGS) $< -o $@
main.o ext1.o: ext1.h
第2步。一旦完美运行,您可以将标头依赖项放在单独的文件中:
生成文件:
VPATH = include src
CPPFLAGS += -Iinclude
CC = gcc
exec: main.o ext1.o
$(CC) $^ -o $@
%.o: %.cc
$(CC) -c $(CPPFLAGS) $< -o $@
-include *.d
main.d:
main.o : ext1.h
ext1.d:
ext1.o: ext1.h
第3步。 完美运行后,您可以自动生成相关性文件:
VPATH = include src
CPPFLAGS += -Iinclude
CC = gcc
exec: main.o ext1.o
$(CC) $^ -o $@
%.o: %.cc
$(CC) -c -MMD $(CPPFLAGS) $< -o $@
-include *.d
答案 1 :(得分:1)
找不到make文件?你为makefile命名了什么?如果您只是执行命令makefile
,请确保其Makefile
或make
,否则您可以将文件名传递给make
,如下所示
make -f yourmakefile
并且Petr Budnik建议的更改必须有效