当我从我的项目的主Makefile中使用时,子目录中的Makefile看不到include路径。我对Makefiles没有太多经验,我读到的很多东西都很令人困惑。这是我的目录布局(由于我刚开始这个项目,以下是我目前所拥有的内容):
main/
Inventory/
Item.h
Item.cpp
Makefile
tools/
include/
json/
json.h
jsoncpp.cpp
Makefile
main.cpp
Makefile
这是主目录中的Makefile:
INCLUDE = -IInventory/
CC = g++
DEP = tools/jsoncpp.o Inventory/Item.o
Main: main.o $(DEP)
cd tools/ && make
cd Inventory/ && make
$(CC) -o Main main.o $(DEP) $(INCLUDE)
main.o main.cpp
$(CC) -c main.cpp $(INCLUDE)
这是工具目录中的Makefile:
INCLUDE = -Iinclude/
CC = g++
jsoncpp.o: jsoncpp.cpp
$(CC) -c jsoncpp.cpp $(INCLUDE)
当我从tools/目录调用make时,它可以正常工作。但是当我从主目录调用make时,会出现以下错误:
g++ -c -o tools/jsoncpp.o tools/json.cpp
tools/jsoncpp.cpp:76:23: fatal error: json/json.h: No such file or directory
#include "json/json.h"
^
compilation terminated.
现在我部分地相信,由于某种原因,它无法找到包含目录,但是该错误的第一行对我来说相当奇怪,因为 g++ 和 -c 之间有一个奇怪的间隙。由于我的项目很快会变得非常庞大,我该如何解决这个问题呢?
#include<json/json.h>
。这就是为什么我的INCLUDE
只有-Iinclude/
。 - Cotant#include <json/json.h>
,并使用-Itools/include
,但仍然出现错误。 - Cotant$(CC) -c jsoncpp.cpp $(INCLUDE)
变成了g++ -c -o tools/jsoncpp.o tools/json.cpp
,它必须是完全不同的操作。 - KIIVCXXFLAGS+=$(INCLUDE)
。更多信息:链接 - KIIV