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

C++ Makefile在项目根目录运行时无法识别相对路径目录问题

问题原因
  • 核心错误是混淆了相对路径和绝对路径的写法规则:
    在类Unix系统中,路径以/开头代表从系统根目录开始寻址的绝对路径,你写的/src/main.cpp会直接去系统根目录下找src文件夹,而不是你当前执行make命令的Ass1项目目录下的src文件夹,自然找不到对应文件。
  • Link阶段的路径也存在同样错误:/bin/main、/bin/main.o都会寻址到系统根目录下的bin文件夹,而非项目内的bin目录,就算编译阶段通过链接也会失败。
修复后的正确Makefile

直接去掉所有项目内相对路径开头的/即可,或者加./前缀也可以(./代表当前工作目录,也就是你执行make命令的Ass1根目录):

all: clean compile link

link:
    g++ -o bin/main bin/main.o bin/Workout.o bin/Trainer.o bin/Studio.o

compile:
    g++ -g -Wall -Weffc++ -c -o bin/main.o src/main.cpp
    g++ -g -Wall -Weffc++ -c -o bin/Studio.o src/Studio.cpp
    g++ -g -Wall -Weffc++ -c -o bin/Workout.o src/Workout.cpp
    g++ -g -Wall -Weffc++ -c -o bin/Trainer.o src/Trainer.cpp

clean:
    rm -f bin/*
可选优化

可以通过定义变量简化Makefile写法,后续修改目录、编译参数时只需要改一处即可:

# 定义公共变量
SRC_DIR := src
BIN_DIR := bin
CXX := g++
CXXFLAGS := -g -Wall -Weffc++

all: clean compile link

link:
	$(CXX) -o $(BIN_DIR)/main $(BIN_DIR)/*.o

compile:
	$(CXX) $(CXXFLAGS) -c -o $(BIN_DIR)/main.o $(SRC_DIR)/main.cpp
	$(CXX) $(CXXFLAGS) -c -o $(BIN_DIR)/Studio.o $(SRC_DIR)/Studio.cpp
	$(CXX) $(CXXFLAGS) -c -o $(BIN_DIR)/Workout.o $(SRC_DIR)/Workout.cpp
	$(CXX) $(CXXFLAGS) -c -o $(BIN_DIR)/Trainer.o $(SRC_DIR)/Trainer.cpp

clean:
	rm -f $(BIN_DIR)/*

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:06:04