为什么make不使用这个包含路径变量?

时间:2014-08-03 15:40:32

标签: makefile

这是我的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;适当的包括。

2 个答案:

答案 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指出这一点。