使用make和自动依赖构建程序

时间:2013-04-05 22:13:25

标签: c++ makefile

我编写了一个简单的C ++程序,这是我第一次使用makefile编译和链接它。作为一个挑战,我想制作一个makefile,它自己列出所有依赖项。我正在关注this教程。我的计划包括main.cppext1.cppext1.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.我不清楚我的情况中缺少什么?

2 个答案:

答案 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,请确保其Makefilemake,否则您可以将文件名传递给make,如下所示

make -f yourmakefile

并且Petr Budnik建议的更改必须有效