永发信息网

汇编makefile相关

答案:2  悬赏:70  手机版
解决时间 2021-03-13 06:41
如何把2个exe和dll同时用一个makefile更新

不太懂makefile,只知道大致原理。对于dll的编译和链接
DLL = algs
EXE = test
ML_FLAG = /c /coff
LINK_FLAG = /subsystem:windows /Dll
LINK_FLAG1 = /subsystem:windows
####################################################
# 创建共享数据段的DLL时使用的连接选项
# LINK_FLAG = /subsystem:windows /Dll /section:.bss,S
####################################################
$(EXE).exe:$(EXE).obj $(DLL).DLL
Link $(LINK_FLAG1) $(EXE).obj
$(DLL).dll: $(DLL).obj $(DLL).def
Link $(LINK_FLAG) /Def:$(DLL).def $(DLL).obj
.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<
clean:
del *.obj
del *.exp
del *.lib
这个makefile可以用,但是我还想在同一个文件夹里面创建一个test.asm,编译成test.exe,其中test.asm调用dll里面的函数,我应该怎么修改这个makefile呢。

感谢回答,辛苦了,我仔细研究了下,之前主要是对文件的依赖关系和隐式规则不是很明白,手动输入就太慢了(之前都是放2个文件夹,更新dll之后粘过去,然后再来调试exe),现在终于弄好了,只是生成exe不用连接上dll。
EXE = test
DLL = algs
OBJS1 = $(EXE).obj
OBJS2 = $(DLL).obj
LINK_FLAG = /subsystem:windows
ML_FLAG = /c /coff
.NOPHY:all
all:$(EXE).exe $(DLL).dll
$(EXE).exe: $(OBJS1)
Link $(LINK_FLAG) $(OBJS1)
$(DLL).dll: $(OBJS2) $(DLL).def
Link $(LINK_FLAG) /Dll /Def:$(DLL).def $(OBJS2)
.asm.obj:
ml $(ML_FLAG) $<
clean:
del *.obj
del *.exp

再次感谢,追问那里写不下了就写这里来了,以前问题太多分早就为0了,无法加分,不好意思。
最佳答案
你makefile 的风格有问题,不是很好。你这么写扩展性也不好。
我给你一个版本的。你写的很混乱我就用gcc 和 link做例子,命令你自己改吧。
只需要改动命令就行了。整个依赖结构就是我写的这样。
只要在all字段包含两个应用程序就行了,然后你只要分别写出两个应用的编译依赖就可以了。
——表示一个tab缩进。
------

LINK=Link
#连接器
GCC=gcc
#编译器
DLL=algs
DLL2=algs2
.NOPHY:all test ${DLL}.dll test2 ${DLL2}.dll
all:test test2
只要在all字段中同时包含test 和test2依赖就会自动更新了。
#=====test.exe
test:test.exe
test.exe:test.obj ${DLL}.dll
——${LINK} $^
——#链接dll和obj成可执行程序test.exe
test.obj:test.asm
——${GCC} -c $< -o $@
——#把test.asm编译成对象文件 test.obj
${DLL}:${DLL}.dll
${DLL}.dll:${DLL}.asm
——#dll.asm编译dll
——${GCC} --share $^ -o$@
#====test2.exe
test2:test2.exe
test2.exe:test2.obj ${DLL}.dll
——${LINK} $^
——#链接dll和obj成可执行程序test2.exe
test2.obj:test2.asm
——${GCC} -c $< -o $@
——#把test2.asm编译成对象文件 test2.obj
${DLL2}:${DLL2}.dll
${DLL2}.dll:${DLL2}.asm
——#dll.asm编译dll
——${GCC} --share $^ -o$@
全部回答

exe=1 表明变量 exe为1

objs=$(exe).obj 表明 变量objs=1.obj, $(exe)是上面那个变量,所以为1.obj

jk_link=/subsystem:windows定义的是 link的参数变量
jk_ml=/c /coff 定义的是 ml参数变量
$(exe):$(objs)  1依赖于1,obj,那个exe是变量名,而不是生成所代表文件的后缀,现在这个变量名exe为1

makefile格式,我就了解的很皮毛,如果有错,希望能谅解,呵呵

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
日本兵倒屎盆看到海滩全是美军叫啥电影
是海洋的逃离蓝色一望无际是什么歌
心语轩面包坊在什么地方啊,我要过去处理事情
Baby 的偶像叫什么(好像是韩国的)
女朋友问我:我在你心里重要吗?我该怎么回答?
华为手机h60红外线遥控功能怎么用
玉溪天眼安防科技有限公司地址在哪,我要去那
广州有没有到西安的大巴 急急急
两个半月能看出男女吗
腹黑和黑化是一个意思吗?
转山在哪里啊,我有事要去这个地方
鼠字多少笔画
风水学上,“灶头的灶向”是以人炒菜时的面向
我的家用英语怎么说
玩LOL推荐块显卡,吧友说gt730、gtx650、hd77
推荐资讯
李立作品2015年拍卖价
勺园东南门在哪里啊,我有事要去这个地方
3+1外贸地址在什么地方,想过去办事
大家好。我是广西玉林人,但我们的祖先是广东
井冈山市茨坪镇新村社区居委会怎么去啊,有知
滨连饭店这个地址在什么地方,我要处理点事
贯溪村这个地址在什么地方,我要处理点事
内江火车站到内江北站怎么走
铁龙坝我想知道这个在什么地方
未婚,工资三千多,能养活一个孩子吗?
福州钢管租赁站电话
健康女性可以吃纳豆粉吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?