我的编译器在 cpp 文件中包含的子文件夹中找不到 header
#include "comm\ComPublic.h"
我的主联编文件:
SUB_POUET=Pouet \
PouetTech \
PouetPrivate
all: $(SUB_POUET)
PouetTech:
@(cd PouetTech && $(MAKE))
Pouet:
@(cd Pouet && $(MAKE))
PouetPrivate:
@(cd PouetPrivate && $(MAKE))
.PHONY: clean mrproper $(SUB_POUET)
clean:
@(cd $(SUB_POUET) && $(MAKE) $@)
mrproper: clean
@(cd $(SUB_POUET) && $(MAKE) $@)
子 makefile1 :
include ../Definitions.mif
SRC=$(wildcard *.cpp)
OBJ_FILES=$(addprefix $(OBJECTS_DIR)/,$(notdir $(SRC:.cpp=.o)))
INCLUDES=-I../PouetTech -I../../libs/MPSSE -I../../libs/FTDI/$(OS) -I../shared -I../../libs/libmodbus-3.0.6/src
CXXFLAGS+=$(INCLUDES)
all: $(OBJ_FILES)
$(OBJECTS_DIR)/%o: %cpp | objects_dir
$(CXX) -o $@ -c $< $(CXXFLAGS)
objects_dir:
mkdir -p $(OBJECTS_DIR)
.PHONY: clean mrproper
clean:
rm -rf *.o
子生成文件 2
include ../Definitions.mif
SRC=$(wildcard *.cpp)
OBJ_FILES=$(addprefix $(OBJECTS_DIR)/,$(notdir $(SRC:.cpp=.o)))
INCLUDES=-I../PouetTech -I../Pouet -I../shared
CXXFLAGS+=$(INCLUDES)
all: $(OBJ_FILES)
$(OBJECTS_DIR)/%o: %cpp | objects_dir
$(CXX) -o $@ -c $< $(CXXFLAGS)
objects_dir:
mkdir -p $(OBJECTS_DIR)
.PHONY: clean mrproper
clean:
rm -rf *.o
子 makefile 3 与 2 相同。 我的文件夹是这样的:
src
|_makefile
|_Pouet
| |_makefile
|_PouetTech
| |_makefile
|_PouetPrivate
| |_makefile
|_shared
|_comm
|_ComPublic.h
问题出现在第 3 个 makefile (PouetPrivate) 期间,但 makefile 中包含文件夹“shared”。
如果我将 -I../shared/comm
添加到 makefile 并将 include 更改为 #include "ComPublic.h"
它会起作用。但我不想在 makefile 中手动包含所有文件夹。
这可能只是一个简单的错误,但我对 makefile 的经验不多
此外,它在 windows 或 Visual Studio 下使用 mingw/msys 时工作正常
编辑:我对“comm”的另一个子文件夹有同样的问题
最佳答案
如果源代码中的 include 指令是 #include "comm\ComPublic.h"
正如您所写的那样,问题很简单,就是您使用的是 Windows 路径定界符 \
。 Linux(和 g++)需要 /
并且不会识别路径。
幸运的是,Visual C++ 将接受这两个分隔符,因此 /
可以一直使用。
关于linux - 找不到子文件夹中的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40431629/