我的编译器在cpp文件中包含的子文件夹中找不到标头
#include "comm\ComPublic.h"
我的主makefile:
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) $@)
Sub-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
Sub-makefile 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)中,但文件夹“shared”包含在makefile中。
如果我将-I../shared/comm
添加到makefile并将include更改为#include "ComPublic.h"
则可行。但我不想手动包含makefile中的所有文件夹。
这可能只是一个简单的错误,但我在makefile中没有太多经验
此外,在Windows或Visual Studio
下使用mingw / msys时,它的工作正常编辑:我和另一个“comm”
子文件夹有同样的问题答案 0 :(得分:0)
如果您的来源中的include指令是#include "comm\ComPublic.h"
,那么问题就在于您使用的是Windows路径分隔符\
。 Linux(和g ++)想要/
并且不会识别路径。
幸运的是,Visual C ++将同时接受两个分隔符,因此/
可以在整个过程中使用。