用make和自动依赖关系构建程序

building program with make and automatic dependencies

本文关键字:关系 构建 程序 依赖 make      更新时间:2023-10-16

我写了一个简单的c++程序,这是我第一次想用makefile编译并链接它。作为一个挑战,我想做一个makefile,它自己列出所有依赖项。我正在遵循本教程。我的程序由main.cpp, ext1.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.我不清楚我在我的情况下缺少什么?

你一次想做的事太多了。

步骤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。一旦工作完美,你可以把头依赖放在单独的文件:

makefile:

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

找不到make文件?你给makefile取了什么名字?如果你只是执行make命令,请确保它是makefileMakefile,否则你可以像这样将文件名传递给make

make -f yourmakefile

和peter Budnik建议的修改必须生效