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

调整main.cpp存放路径:修改C++项目Makefile的技术问询

调整Makefile适配新的文件夹结构

没问题,我来帮你搞定这个调整!首先咱们先明确下目标文件夹结构——假设你把main.cpp单独放到一个名为app的文件夹里(名字可以随便改,后续对应调整变量就行),最终的结构应该是这样:

  • build:存放Makefile
  • include:包含a.hpp、b.hpp
  • src:包含a.cpp、b.cpp
  • app:包含main.cpp

接下来咱们修改原来的Makefile,只需要新增一个指向main.cpp所在目录的变量,再给main.o单独加一条编译规则就可以了。修改后的完整Makefile如下:

IDIR =../include
SDIR = ../src
# 新增:指定main.cpp所在的文件夹
APPDIR = ../app

CXX=g++
CFLAGS=-I$(IDIR) -std=c++11

_DEPS = a.hpp b.hpp
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))

OBJ = a.o b.o main.o

# 编译src目录下的a.cpp和b.cpp
%.o: $(SDIR)/%.cpp $(DEPS)
	$(CXX) -c -o $@ $< $(CFLAGS)

# 单独编译app目录下的main.cpp
main.o: $(APPDIR)/main.cpp $(DEPS)
	$(CXX) -c -o $@ $< $(CFLAGS)

main: $(OBJ)
	$(CXX) -o $@ $^ $(CFLAGS)

clean:
	rm -f *.o
	rm -f *~
	rm -f main

关键修改点说明:

  • 新增APPDIR = ../app:专门用来定义main.cpp所在的新文件夹,后续如果要改文件夹名称,只需要修改这一行即可,不用动其他编译规则。
  • 单独添加main.o的编译规则:因为main.cpp不在原来的src目录下了,原来的%.o规则只能匹配src里的源文件,所以需要单独给main.o指定它的源文件路径,编译命令和其他目标文件保持一致,确保能正确找到头文件。
  • 修正了clean里的*o为*.o:原来的写法少了点,虽然大部分系统能识别,但规范写法是*.o,避免不必要的问题。

如果你的main.cpp所在文件夹不是app,比如叫main_src,只需要把APPDIR的值改成../main_src就可以正常使用啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:34:19