我试图避免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”----在头文件声明
中答案 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 $@
那应该对你有帮助!
答案 1 :(得分:0)
这是一个纯make
错误消息。该错误与任何.cpp或.h文件的内容无关。该错误实际上只能来自Makefile的内容,以及其中命名的文件的存在与否。
根据此错误消息,make
表示无法找到文件include/functions.h
。仔细检查它实际上是在这里,具有正确的名称和匹配的情况。
出于调试目的,您可以将以下行添加到Makefile:
./include/functions.h:
touch $@
如果缺少,它将指示make创建一个空的include / functions.h文件。