我正在尝试使用此make文件编译和我的项目:
GLFLAGS=-lGL -lGLU -lX11 -lXxf86vm -lXrandr -lpthread -lxi
CC=g++
window.o: window.h window.cpp
$(CC) -c $< -o $@ $(GLFLAGS)
main.o: window.h main.cpp
$(CC) -c $< -o $@ $(GLFLAGS)
all: window.o main.o
$(CC) $^ -o main
但是我收到了这个错误:
/usr/bin/ld:window.o: file format not recognized; treating as linker script
/usr/bin/ld:window.o:1: syntax error
collect2: error: ld returned 1 exit status
main.cpp和window.cpp都依赖于我在window.h中创建的类。
答案 0 :(得分:1)
您的旗帜未在正确的位置使用。 -l
标志是链接器标志,仅在链接时使用。
使用正确的变量,并添加一些以澄清,您可以将您的makefile更改为:
EXE := main
SRC := main.cpp window.cpp
OBJ := $(SRC:.cpp=.o)
LDLIBS := -lGL -lGLU -lX11 -lXxf86vm -lXrandr -lpthread -lxi
.PHONY: all
all: $(EXE)
$(EXE): $(OBJ)
$(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@
如果您需要生成自动依赖关系,请添加以下内容:
EXE := main
SRC := main.cpp window.cpp
OBJ := $(SRC:.cpp=.o)
DEP := $(OBJ:.o=.d)
LDLIBS := -lGL -lGLU -lX11 -lXxf86vm -lXrandr -lpthread -lxi
CPPFLAGS := -MMD -MP
.PHONY: all
all: $(EXE)
$(EXE): $(OBJ)
$(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@
-include $(DEP)