这是我的makefile
CC = clang
CXX = clang++
LD =
CFLAGS = -Wall
CXXFLAGS = -Wall -std=c++11
LDFLAGS = -Wall -std=c++11
LDLIBS = -lglfw3 -ldl -lGL -lGLU -lX11 -lXi -lXrandr -lXxf86vm -lpthread -lXcursor
OBJ_DIR = bin
LIB_DIR =
INC_DIR = -I./include/ -I./src/
SRC_DIR = src
SOURCE = $(SRC_DIR)/gl3w.c $(SRC_DIR)/main.cpp $(SRC_DIR)/shader_util.cpp
OBJECTS = $(OBJ_DIR)/gl3w.o $(OBJ_DIR)/main.o $(SRC_DIR)/shader_util.o
EXECUTABLE = $(OBJ_DIR)/camo-generator
all: $(OBJECTS) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CXX) $(LDFLAGS) -o $(EXECUTABLE) $(OBJECTS) $(LDLIBS)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
$(CXX) $(CXXFLAGS) $(INC_DIR) -c -o $@ $<
$(OBJ_DIR)/gl3w.o: $(SRC_DIR)/gl3w.c
$(CC) $(CFLAGS) $(INC_DIR) -c -o $@ $<
... snip ...
终端输出
clang -Wall -I./include/ -I./src/ -c -o bin/gl3w.o src/gl3w.c
clang++ -Wall -std=c++11 -I./include/ -I./src/ -c -o bin/main.o src/main.cpp
clang++ -Wall -std=c++11 -c -o src/shader_util.o src/shader_util.cpp
src/shader_util.cpp:1:10: fatal error: 'GL/gl3w.h' file not found
#include "GL/gl3w.h"
^
1 error generated.
make: *** [src/shader_util.o] Error 1
为什么从-I.include/ -I./src/
编译中删除shader_util.cpp
?我试过让每个文件都清楚地编译,它仍然会忘记&#39;适当的包括。
答案 0 :(得分:0)
尝试:
#include <GL/gl3w.h>
而不是
#include "GL/gl3w.h"
对于#include "GL/gl3w.h"
,预处理器在与包含该指令的文件相同的目录中进行搜索。此方法通常用于包含程序员定义的头文件。
对于#include <GL/gl3w.h>
,预处理器以依赖于实现的方式进行搜索,通常在编译器预先指定的目录中进行搜索。此方法通常用于包含标准库头文件。
shader_util.cpp 包含 gl3w.h 和 gl3w.h 属于您项目中没有的库,因此编译器说使用#include "GL/gl3w.h"
时找不到文件。
答案 1 :(得分:0)
行中的错字
OBJECTS = $(OBJ_DIR)/gl3w.o $(OBJ_DIR)/main.o $(SRC_DIR)/shader_util.o
^^^^^^^
感谢nobar指出这一点。