多个文件夹的makefile怎么写啊

imarshal 2017-01-16 03:32:00
就是有多个文件夹,每个文件夹下面单独写的makefile可以执行,但总的只用一个makefile来处理应该怎么写啊
...全文
451 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zilaishuichina 2017-01-16
  • 打赏
  • 举报
回复
引用 12 楼 imarshal 的回复:
[quote=引用 11 楼 zilaishuichina 的回复:] 扩展名你自己取什么都好, 只要你开心就好,你也可以就叫默认的.out
哦,我还以为你是在用mingw编译真正的exe[/quote] 这个就是linux下的, 只不过是我这一个c++项目里的,我复制过来的, 你的如果是c项目的话,就把cpp换成c,g++换成gcc
imarshal 2017-01-16
  • 打赏
  • 举报
回复
引用 11 楼 zilaishuichina 的回复:
扩展名你自己取什么都好, 只要你开心就好,你也可以就叫默认的.out
哦,我还以为你是在用mingw编译真正的exe
zilaishuichina 2017-01-16
  • 打赏
  • 举报
回复
引用 10 楼 imarshal 的回复:
[quote=引用 9 楼 zilaishuichina 的回复:] linux都是/,windows下面才是\\
什么意思,我看第一行是exe啊,linux下怎么叫这个[/quote] 扩展名你自己取什么都好, 只要你开心就好,你也可以就叫默认的.out
imarshal 2017-01-16
  • 打赏
  • 举报
回复
引用 9 楼 zilaishuichina 的回复:
linux都是/,windows下面才是\\
什么意思,我看第一行是exe啊,linux下怎么叫这个
zilaishuichina 2017-01-16
  • 打赏
  • 举报
回复
引用 8 楼 imarshal 的回复:
[quote=引用 5 楼 zilaishuichina 的回复:]


OUT_PUT = XXX/OUT/XXX.exe

SRC_DIR_XXX1 = XXX/SRC/XXX1
SRC_DIR_XXX2 = XXX/SRC/XXX2

OBJ_DIR_XXX1 = XXX/OBJ/XXX1
OBJ_DIR_XXX2 = XXX/OBJ/XXX2

OBJS = $(patsubst $(SRC_DIR_XXX1)/%.cpp, $(OBJ_DIR_XXX1)/%.o, $(wildcard $(SRC_DIR_XXX1)/*.cpp)) \
	$(patsubst $(SRC_DIR_XXX2)/%.cpp, $(OBJ_DIR_XXX2)/%.o, $(wildcard $(SRC_DIR_XXX2)/*.cpp))

INCLUDE_DIR = -IXXX/SRC/XXX1 -IXXX/SRC/XXX2

vpath %.h XXX/SRC/XXX1
vpath %.h XXX/SRC/XXX2

vpath %.cpp XXX/SRC/XXX1
vpath %.cpp XXX/SRC/XXX2

All: $(OBJ_DIR_XXX1) $(OBJ_DIR_XXX2) $(OBJS)
	g++ -o $(OUT_PUT) $(OBJS)

$(OBJ_DIR_XXX1) $(OBJ_DIR_XXX2):
	mkdir $@

$(patsubst $(SRC_DIR_XXX1)/%.cpp, $(OBJ_DIR_XXX1)/%.o, $(wildcard $(SRC_DIR_XXX1)/*.cpp)): $(OBJ_DIR_XXX1)/%.o: $(SRC_DIR_XXX1)/%.cpp
	g++ -c $< $(INCLUDE_DIR) -o $@

$(patsubst $(SRC_DIR_XXX2)/%.cpp, $(OBJ_DIR_XXX2)/%.o, $(wildcard $(SRC_DIR_XXX2)/*.cpp)): $(OBJ_DIR_XXX2)/%.o: $(SRC_DIR_XXX2)/%.cpp
	g++ -c $< $(INCLUDE_DIR) -o $@

clean:
	-rm -rf $(OUT_PUT) $(OBJ_DIR_XXX1) $(OBJ_DIR_XXX2)

多谢了,还有很多看不明白,不过这和linux下的规则有没有区别啊,怎么exe也是用的/,应该是\\啊[/quote] linux都是/,windows下面才是\\
imarshal 2017-01-16
  • 打赏
  • 举报
回复
引用 5 楼 zilaishuichina 的回复:


OUT_PUT = XXX/OUT/XXX.exe

SRC_DIR_XXX1 = XXX/SRC/XXX1
SRC_DIR_XXX2 = XXX/SRC/XXX2

OBJ_DIR_XXX1 = XXX/OBJ/XXX1
OBJ_DIR_XXX2 = XXX/OBJ/XXX2

OBJS = $(patsubst $(SRC_DIR_XXX1)/%.cpp, $(OBJ_DIR_XXX1)/%.o, $(wildcard $(SRC_DIR_XXX1)/*.cpp)) \
	$(patsubst $(SRC_DIR_XXX2)/%.cpp, $(OBJ_DIR_XXX2)/%.o, $(wildcard $(SRC_DIR_XXX2)/*.cpp))

INCLUDE_DIR = -IXXX/SRC/XXX1 -IXXX/SRC/XXX2

vpath %.h XXX/SRC/XXX1
vpath %.h XXX/SRC/XXX2

vpath %.cpp XXX/SRC/XXX1
vpath %.cpp XXX/SRC/XXX2

All: $(OBJ_DIR_XXX1) $(OBJ_DIR_XXX2) $(OBJS)
	g++ -o $(OUT_PUT) $(OBJS)

$(OBJ_DIR_XXX1) $(OBJ_DIR_XXX2):
	mkdir $@

$(patsubst $(SRC_DIR_XXX1)/%.cpp, $(OBJ_DIR_XXX1)/%.o, $(wildcard $(SRC_DIR_XXX1)/*.cpp)): $(OBJ_DIR_XXX1)/%.o: $(SRC_DIR_XXX1)/%.cpp
	g++ -c $< $(INCLUDE_DIR) -o $@

$(patsubst $(SRC_DIR_XXX2)/%.cpp, $(OBJ_DIR_XXX2)/%.o, $(wildcard $(SRC_DIR_XXX2)/*.cpp)): $(OBJ_DIR_XXX2)/%.o: $(SRC_DIR_XXX2)/%.cpp
	g++ -c $< $(INCLUDE_DIR) -o $@

clean:
	-rm -rf $(OUT_PUT) $(OBJ_DIR_XXX1) $(OBJ_DIR_XXX2)

多谢了,还有很多看不明白,不过这和linux下的规则有没有区别啊,怎么exe也是用的/,应该是\\啊
赵4老师 2017-01-16
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
一般都是一个项目一个makefile
比如: D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL>dir /b /s makefile D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\AUTOCLIK\STEP1\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\AUTOCLIK\STEP2\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\AUTOCLIK\STEP3\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\AUTODRIV\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\CONTAIN\STEP1\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\CONTAIN\STEP2\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\ENROLL\STEP1\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\ENROLL\STEP2\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\ENROLL\STEP3\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\ENROLL\STEP4\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP2\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP3\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP4\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP5\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP6\MAKEFILE D:\MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP7\MAKEFILE
赵4老师 2017-01-16
  • 打赏
  • 举报
回复
一般都是一个项目一个makefile
zilaishuichina 2017-01-16
  • 打赏
  • 举报
回复
引用 2 楼 imarshal 的回复:
[quote=引用 1 楼 zilaishuichina 的回复:] All: cd XXX; make cd XXX; make cd XXX; make cd XXX; make
这样写感觉不太好啊,应该是只写一个makefile,就是不知道makefile中怎么处理cd的[/quote]


OUT_PUT = XXX/OUT/XXX.exe

SRC_DIR_XXX1 = XXX/SRC/XXX1
SRC_DIR_XXX2 = XXX/SRC/XXX2

OBJ_DIR_XXX1 = XXX/OBJ/XXX1
OBJ_DIR_XXX2 = XXX/OBJ/XXX2

OBJS = $(patsubst $(SRC_DIR_XXX1)/%.cpp, $(OBJ_DIR_XXX1)/%.o, $(wildcard $(SRC_DIR_XXX1)/*.cpp)) \
	$(patsubst $(SRC_DIR_XXX2)/%.cpp, $(OBJ_DIR_XXX2)/%.o, $(wildcard $(SRC_DIR_XXX2)/*.cpp))

INCLUDE_DIR = -IXXX/SRC/XXX1 -IXXX/SRC/XXX2

vpath %.h XXX/SRC/XXX1
vpath %.h XXX/SRC/XXX2

vpath %.cpp XXX/SRC/XXX1
vpath %.cpp XXX/SRC/XXX2

All: $(OBJ_DIR_XXX1) $(OBJ_DIR_XXX2) $(OBJS)
	g++ -o $(OUT_PUT) $(OBJS)

$(OBJ_DIR_XXX1) $(OBJ_DIR_XXX2):
	mkdir $@

$(patsubst $(SRC_DIR_XXX1)/%.cpp, $(OBJ_DIR_XXX1)/%.o, $(wildcard $(SRC_DIR_XXX1)/*.cpp)): $(OBJ_DIR_XXX1)/%.o: $(SRC_DIR_XXX1)/%.cpp
	g++ -c $< $(INCLUDE_DIR) -o $@

$(patsubst $(SRC_DIR_XXX2)/%.cpp, $(OBJ_DIR_XXX2)/%.o, $(wildcard $(SRC_DIR_XXX2)/*.cpp)): $(OBJ_DIR_XXX2)/%.o: $(SRC_DIR_XXX2)/%.cpp
	g++ -c $< $(INCLUDE_DIR) -o $@

clean:
	-rm -rf $(OUT_PUT) $(OBJ_DIR_XXX1) $(OBJ_DIR_XXX2)

imarshal 2017-01-16
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
搜“跟我一起写makefile”
没讲到,不可能一个文件夹一个makefile啊
赵4老师 2017-01-16
  • 打赏
  • 举报
回复
搜“跟我一起写makefile”
imarshal 2017-01-16
  • 打赏
  • 举报
回复
引用 1 楼 zilaishuichina 的回复:
All: cd XXX; make cd XXX; make cd XXX; make cd XXX; make
这样写感觉不太好啊,应该是只写一个makefile,就是不知道makefile中怎么处理cd的
zilaishuichina 2017-01-16
  • 打赏
  • 举报
回复
All: cd XXX; make cd XXX; make cd XXX; make cd XXX; make

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧