You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加glad/glfw后,Makefile构建C OpenGL项目时clang报错不存在文件

问题:Makefile编译时传入无关文件导致clang报错

为C语言OpenGL项目搭建Makefile环境,添加glad和glfw后,编译出现以下错误:

clang: error: no such file or directory: 'all.o'
clang: error: no such file or directory: 'libs'
clang: error: no such file or directory: 'build'

原Makefile代码:

CC = clang
`CCFLAGS = -lGL -lglfw -std=c++20 -v -Wall -Wextra -Wepedantic -g -lgdi32
LDFLAGS = lib/glad/src/glad.o lib/glfw/src/libglfw3.a -lgdi32 -lm 
SRC = $(wildcard src/*.c)
OBJ  = $(SRC:.c=.o)
BIN = bin

all: libs build

libs:
    cd lib/glad && $(CC) -o src/glad.o -Iinclude -c src/glad.c
    cd lib/glfw && cmake . -G 'Unix Makefiles' && make

build: $(OBJ)
    $(CC) -o $(BIN)/build $^ $(LDFLAGS)

%.o %.c:
    $(CC) -o $@ -c $< $(CCFLAGS)

run:
    ./bin/build.exe

问题原因及修复方案

  • 多余反引号导致变量解析错误
    CCFLAGS定义行开头的反引号`是语法错误,会打乱Make的变量解析逻辑,直接删除该反引号。

  • 模式规则写法错误
    %.o %.c:是无效的规则写法,Make会将all、libs、build这些伪目标也匹配到该规则,尝试生成对应的.o文件,这就是报错的核心原因。正确写法应为%.o: %.c,明确表示从.c文件生成.o文件。

  • 编译与链接选项混淆
    -lGL、-lglfw属于链接阶段的库参数,不应放在编译选项CCFLAGS中,需移到LDFLAGS。同时项目为C语言,编译标准改为-std=c2x(或c17)更合适,另外-Wepedantic是拼写错误,正确为-Wpedantic。

  • glfw编译流程优化
    为glfw的cmake命令添加-DCMAKE_BUILD_TYPE=Debug或Release明确编译类型;同时添加目录判断,避免每次执行都重复cmake。

修复后的Makefile

CC = clang
CCFLAGS = -std=c2x -v -Wall -Wextra -Wpedantic -g
LDFLAGS = lib/glad/src/glad.o lib/glfw/src/libglfw3.a -lGL -lglfw -lgdi32 -lm 
SRC = $(wildcard src/*.c)
OBJ  = $(SRC:.c=.o)
BIN = bin

all: libs build

libs:
    cd lib/glad && $(CC) -o src/glad.o -Iinclude -c src/glad.c
    cd lib/glfw && [ -d build ] || cmake . -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Debug && make

build: $(OBJ)
    $(CC) -o $(BIN)/build $^ $(LDFLAGS)

%.o: %.c
    $(CC) -o $@ -c $< $(CCFLAGS)

run:
    ./bin/build.exe

内容的提问来源于stack exchange,提问作者Haunted Theorists

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:01:19