MakeFile:不同目录中的标头 - 错误

时间:2013-10-21 13:42:16

标签: c++ makefile

我试图避免C ++文件的头文件声明中的相对路径。所以,我通过以下在线示例使用了makefile。但我收到了错误。请检查代码并帮我解决此问题

COMPILER = g++
IDIR = ./include
CXXFLAGS += -I$(IDIR)
CFLAGS += -I$(IDIR)

EXEC = hello
OBJECTS = main.o factorial.o hello.o

all: $(EXEC)

(---- I had also used CFLAGS instead of CXXFLAGS below but the same result###)

$(EXEC): $(OBJECTS)
    $(COMPILER) $(CXXFLAGS) $(OBJECTS) -o $(EXEC)  

main.o: main.cpp ./include/functions.h 
    $(COMPILER) $(CXXFLAGS) -c main.cpp

factorial.o: main.cpp ./include/functions.h 
    $(COMPILER) $(CXXFLAGS) -c factorial.cpp

hello.o: main.cpp ./include/functions.h 
    $(COMPILER) $(CXXFLAGS) -c hello.cpp

错误:

make: * 没有规则来制作目标'include / functions.h“    “main.o”要求创建。闭。

目录结构

- main.cpp
- factorial.cpp
- hello.cpp
- MakeFile.mk
- +include (dir) 
      ----->functions.h

main.cpp包含---- include“functions.h”----在头文件声明

2 个答案:

答案 0 :(得分:2)

您没有将h文件用作源文件。 应该只有:

main.o: main.cpp
$(COMPILER) $(CXXFLAGS) -c main.cpp

编辑:

我复制你的文件夹内容并编写简单的应用程序,其中hello.cpp有一个简单的void函数,factorial.cpp有简单的int-returns函数,main.cpp有int main()并使用这个函数,include.h hafe声明这两个虚函数。 现在。我的makefile看起来:

COMPILER = g++
IDIR = ./include
CXXFLAGS += -I$(IDIR)
EXEC =  hello
OBJECTS =  main.o factorial.o hello.o

all: $(EXEC)

$(EXEC): $(OBJECTS)
        $(COMPILER) $(CXXFLAGS) $(OBJECTS) -o $(EXEC)

main.o: main.cpp factorial.o hello.o
    $(COMPILER) -c $(CXXFLAGS) $^ -o $@

factorial.o: factorial.cpp
    $(COMPILER) -c $(CXXFLAGS) $^ -o $@

hello.o: hello.cpp
    $(COMPILER) -c $(CXXFLAGS) $^ -o $@

download for my sample

那应该对你有帮助!

答案 1 :(得分:0)

这是一个纯make错误消息。该错误与任何.cpp或.h文件的内容无关。该错误实际上只能来自Makefile的内容,以及其中命名的文件的存在与否。

根据此错误消息,make表示无法找到文件include/functions.h。仔细检查它实际上是在这里,具有正确的名称和匹配的情况。

出于调试目的,您可以将以下行添加到Makefile:

./include/functions.h:
    touch $@

如果缺少,它将指示make创建一个空的include / functions.h文件。