0

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

4

2 回答 2

3

你试图一次做太多事情。

步骤 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

主.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
于 2013-04-05T23:19:30.870 回答
1

没有找到make文件?你给makefile起什么名字?确保它makefile或者Makefile如果你只是执行命令make,否则你可以将文件名传递给make这样的

make -f yourmakefile

Petr Budnik 建议的更改必须有效

于 2013-04-06T03:26:51.577 回答