为什么 GCC 在 includes 文件夹中找不到头文件?
Why GCC can not find the header files in includes folder?
我正在尝试使用此生成文件 ~
使用 #include <glad/glad.h>
在我的 main.cpp 中包含 glad.h
CC := g++
CFLAGS := -std=c++17 -Wall -Wextra -g
BIN := bin
SRC := src
INCLUDE := include
LIB := lib
LIBRARIES := -lglad -lglfw3dll
ifeq ($(OS),Windows_NT)
EXECUTABLE := main.exe
SOURCEDIRS := $(SRC)
INCLUDEDIRS := $(INCLUDE)
LIBDIRS := $(LIB)
else
EXECUTABLE := main
SOURCEDIRS := $(shell find $(SRC) -type d)
INCLUDEDIRS := $(shell find $(INCLUDE) -type d)
LIBDIRS := $(shell find $(LIB) -type d)
endif
CINCLUDES := $(patsubst %,-I%, $(INCLUDEDIRS:%/=%))
CLIBS := $(patsubst %,-L%, $(LIBDIRS:%/=%))
SOURCES := $(wildcard $(patsubst %,%/*.cpp, $(SOURCEDIRS)))
OBJECTS := $(SOURCES:.cpp=.o)
all: $(BIN)/$(EXECUTABLE)
.PHONY: clean
clean:
-$(RM) $(BIN)/$(EXECUTABLE)
-$(RM) $(OBJECTS)
run: all
./$(BIN)/$(EXECUTABLE)
$(BIN)/$(EXECUTABLE): $(OBJECTS)
$(CC) $(CFLAGS) $(CINCLUDES) $(CLIBS) $^ -o $@ $(LIBRARIES)
但是每次我收到这个错误...
g++ -c -o src/main.o src/main.cpp
src/main.cpp:1:10: fatal error: glad/glad.h: No such file or directory
#include <glad/glad.h>
^~~~~~~~~~~~~
compilation terminated.
mingw32-make: *** [<builtin>: src/main.o] Error 1
每个头文件都存在于 include 文件夹中,但它仍然无法正常工作。
请帮忙...
如何解决这个问题
如果 make 文件中有任何其他类型的错误,请指出...
谢谢。
问题是 make
正在调用内置规则将您的源文件编译为目标文件,但该规则对您的 CINCLUDES
或其他变量一无所知。从 documentation...
Compiling C++ programs
n.o is made automatically from n.cc, n.cpp, or n.C with a recipe of
the form ‘$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c’.
最简单的解决方案是将 $(CINCLUDES)
添加到 $(CPPFLAGS)
CPPFLAGS += $(CINCLUDES)
我正在尝试使用此生成文件 ~
使用#include <glad/glad.h>
在我的 main.cpp 中包含 glad.h
CC := g++
CFLAGS := -std=c++17 -Wall -Wextra -g
BIN := bin
SRC := src
INCLUDE := include
LIB := lib
LIBRARIES := -lglad -lglfw3dll
ifeq ($(OS),Windows_NT)
EXECUTABLE := main.exe
SOURCEDIRS := $(SRC)
INCLUDEDIRS := $(INCLUDE)
LIBDIRS := $(LIB)
else
EXECUTABLE := main
SOURCEDIRS := $(shell find $(SRC) -type d)
INCLUDEDIRS := $(shell find $(INCLUDE) -type d)
LIBDIRS := $(shell find $(LIB) -type d)
endif
CINCLUDES := $(patsubst %,-I%, $(INCLUDEDIRS:%/=%))
CLIBS := $(patsubst %,-L%, $(LIBDIRS:%/=%))
SOURCES := $(wildcard $(patsubst %,%/*.cpp, $(SOURCEDIRS)))
OBJECTS := $(SOURCES:.cpp=.o)
all: $(BIN)/$(EXECUTABLE)
.PHONY: clean
clean:
-$(RM) $(BIN)/$(EXECUTABLE)
-$(RM) $(OBJECTS)
run: all
./$(BIN)/$(EXECUTABLE)
$(BIN)/$(EXECUTABLE): $(OBJECTS)
$(CC) $(CFLAGS) $(CINCLUDES) $(CLIBS) $^ -o $@ $(LIBRARIES)
但是每次我收到这个错误...
g++ -c -o src/main.o src/main.cpp
src/main.cpp:1:10: fatal error: glad/glad.h: No such file or directory
#include <glad/glad.h>
^~~~~~~~~~~~~
compilation terminated.
mingw32-make: *** [<builtin>: src/main.o] Error 1
每个头文件都存在于 include 文件夹中,但它仍然无法正常工作。 请帮忙... 如何解决这个问题 如果 make 文件中有任何其他类型的错误,请指出... 谢谢。
问题是 make
正在调用内置规则将您的源文件编译为目标文件,但该规则对您的 CINCLUDES
或其他变量一无所知。从 documentation...
Compiling C++ programs
n.o is made automatically from n.cc, n.cpp, or n.C with a recipe of the form ‘$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c’.
最简单的解决方案是将 $(CINCLUDES)
添加到 $(CPPFLAGS)
CPPFLAGS += $(CINCLUDES)