我正在尝试使用此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中创建的类。
最佳答案
您的标志未在正确的位置使用。 -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)
关于c++ - 无法识别文件格式;作为链接描述文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24665310/