未找到子文件夹中的标头

时间:2016-11-04 21:00:25

标签: linux makefile g++

我的编译器在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”

子文件夹有同样的问题

1 个答案:

答案 0 :(得分:0)

如果您的来源中的include指令是#include "comm\ComPublic.h",那么问题就在于您使用的是Windows路径分隔符\。 Linux(和g ++)想要/并且不会识别路径。

幸运的是,Visual C ++将同时接受两个分隔符,因此/可以在整个过程中使用。