linux - 找不到子文件夹中的 header

标签 linux makefile g++

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

相关文章:

c - OpenGL ES 2.0 着色器创建失败

windows - CentOS 与 Windows Server 2008

linux - puppet 删除目录并用链接替换它

可以为 makefile 变量分配从源文件中读取的值吗?

c++ - 如何在我的 makefile 中包含目录及其所有子目录的 header ?

c - Mkdir() permission denied C/linux 编程

ubuntu - 在ubuntu中编译opencv程序

c++ - 是否可以在 C++ 中使用匿名类?

c++ - 从临时流中提取字符时出现 GCC 编译器错误

c++ - 为什么在将 C 样式数组传递给需要 std::string 的方法时出现链接器问题?