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

使用Makefile实现增量编译报错的解决方案咨询

问题原因分析
  1. 目标目录子结构未创建:当前规则仅创建了BUILD_DIR顶层目录,生成子目录下的.obj文件时(如backend/backend.obj),对应的子目录不存在,导致make无法生成目标文件,触发"无规则"错误。
  2. 缺少第三方依赖的编译规则:VENDORS中的源文件来自../include目录,原Makefile仅定义了../../src下cpp文件的编译规则,未处理第三方文件的编译逻辑。
  3. BUILD_DIR路径不符合预期:原配置指向../../SIN2024/x64/Debug,与你预期的ROOT_DIR/build不符。
解决步骤与修改后的Makefile
# Gather all the source files
SRC = $(wildcard ../../src/*.cpp ../../src/*/*.cpp ../../src/*/*/*.cpp ../../src/*/*/*/*.cpp)
VENDORS = $(wildcard ../include/glad/glad.c ../include/im3d/im3d.cpp ../include/imgui/*.cpp)

# Object files (stored in ROOT/build directory)
BUILD_DIR = ../../build
OBJ = $(SRC:../../src/%.cpp=$(BUILD_DIR)/%.obj) $(VENDORS:../include/%.cpp=$(BUILD_DIR)/%.obj) $(VENDORS:../include/%.c=$(BUILD_DIR)/%.obj)

# Include and library directories
INCLUDE = -I../include -I../../src
LIBS = -L../lib -lglfw3dll -lassimp

# Compiler and linker flags
CXX = g++
CXXFLAGS = -g --std=c++20 $(INCLUDE)
CC = gcc
CFLAGS = -g $(INCLUDE)

# Rule to generate object files from src directory cpp files
$(BUILD_DIR)/%.obj: ../../src/%.cpp
    @mkdir -p $(dir $@)
    $(CXX) $(CXXFLAGS) -c "$<" -o "$@"

# Rule to generate object files from include directory cpp files (third-party)
$(BUILD_DIR)/%.obj: ../include/%.cpp
    @mkdir -p $(dir $@)
    $(CXX) $(CXXFLAGS) -c "$<" -o "$@"

# Rule to generate object files from include directory c files (like glad.c)
$(BUILD_DIR)/%.obj: ../include/%.c
    @mkdir -p $(dir $@)
    $(CC) $(CFLAGS) -c "$<" -o "$@"

# Main build target
all: main.exe

# Rule to link the final executable
main.exe: $(OBJ)
    $(CXX) -o $@ $(OBJ) $(LIBS)

# Clean up object files and the executable
clean:
    rm -rf $(BUILD_DIR) main.exe
关键修改说明
  • 修正BUILD_DIR路径:改为../../build,匹配你预期的ROOT/build目录。
  • 自动创建子目录:使用mkdir -p $(dir $@)替代mkdir -p $(BUILD_DIR),$(dir $@)会自动提取目标文件所在的完整路径,确保所有子目录都被创建。
  • 添加第三方文件编译规则:分别为../include下的cpp和c文件编写编译规则,覆盖所有VENDORS源文件的编译需求。
  • 明确Windows可执行文件名:将链接目标改为main.exe,符合Windows平台的可执行文件命名规范。
  • 优化VENDORS通配符:用../include/imgui/*.cpp简化重复的ImGui文件路径,提升维护性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:15:10