MakeFile:不同目录中的标题 - 错误
Posted
技术标签:
【中文标题】MakeFile:不同目录中的标题 - 错误【英文标题】:MakeFile : Header in different Directory - Error 【发布时间】:2013-10-21 13:42:15 【问题描述】:我试图避免在 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"---- 在头声明中
【问题讨论】:
这是一个纯粹的make
错误消息。该错误与任何 .cpp 或 .h 文件的内容无关。错误实际上只能来自 Makefile 的内容,以及其中命名的文件是否存在。因此,make
声明它找不到文件include/functions.h
。仔细检查它是否真的在这里,名称和大小写正确。
感谢您的回复。但是我使用的目录结构与帖子中提到的相同,并且我检查了拼写、匹配大小写,但一切似乎都如帖子中所示。我仍然得到同样的错误
只是检查一下,+
是+include
目录名称的一部分吗?
出于调试目的,您可以在 Makefile 中添加以下行:./include/functions.h:
和 \ttouch $@
。 (其中\t
是一个制表符。)如果缺少,它将指示make
创建一个空的include/functions.h 文件。
我只是保留 + 以将其标识为帖子中的目录。你能不能给我一次上面的命令。
【参考方案1】:
您没有使用 h 文件作为源文件。 应该只有:
main.o: main.cpp
$(COMPILER) $(CXXFLAGS) -c main.cpp
编辑:
我复制您的文件夹内容并编写简单的应用程序,其中 hello.cpp 具有简单的 void 函数,factorial.cpp 具有简单的 int-returning 函数,而 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
这应该对你有帮助!
【讨论】:
感谢您的回复。当我进行相应更改时,我收到此错误 g++ -I./include -c main.cpp main.cpp:2:23:fatal error: functions.h: File or directory not found 是的,但是你已经指定了一个头文件。你必须有 -I./include/functions.h 所以将 IDIR = ./include 更改为 IDIR = ./include/functions.h 谢谢我也做了同样的事情现在我得到 g++ -I./include/functions.h -c main.cpp main.cpp:2:23:fatal error: functions.h: File或找不到目录但同样的错误即将到来 ` main.cpp:2:23:fatal error: functions.h: File or directory not found` 你没有在你的main.o: main.cpp $(COMPILER) $(CXXFLAGS) -c main.cpp
提供-o main.o 【参考方案2】:
这是一个纯粹的make
错误消息。该错误与任何 .cpp 或 .h 文件的内容无关。错误实际上只能来自 Makefile 的内容,以及其中命名的文件是否存在。
根据此错误消息,make
指出它找不到文件 include/functions.h
。仔细检查它确实在这里,名称和大小写正确。
出于调试目的,您可以在 Makefile 中添加以下行:
./include/functions.h:
touch $@
如果缺失,它将指示 make 创建一个空的 include/functions.h 文件。
【讨论】:
以上是关于MakeFile:不同目录中的标题 - 错误的主要内容,如果未能解决你的问题,请参考以下文章
Makefile项目管理-----在Linux下编译c/c++程序
从另一个makefile在Makefile中追加/替换字符串