NMAKE生成文件,在子文件夹链接对象文件
我的makefile文件定义了一个链接命令:NMAKE生成文件,在子文件夹链接对象文件
prod_link = $(LINK) $(LINK_FLAGS) -o$(PROD_OUT) $(PROD_OBJS)
其中$(PROD_OBJS)
的形式为目标文件的列表:
PROD_OBJS = objfile1.obj objfile2.obj objfile3.obj ... objfileN.obj
现在makefile文件本身在我的项目目录的根目录。 在根目录下有对象和列表文件会变得麻烦,我想将它们放在一个子文件夹中。
大厦和OBJ文件outputing到子文件夹的作品,我与后缀和推理这样做:
.s.obj:
$(ASSEMBLY) $(FLAGS) $*.s -o Objects\$*.obj
的问题是到Objects
文件传递给链接命令。
我想:
prod_link = $(LINK) $(LINK_FLAGS) -o$(PROD_OUT) Objects\$(PROD_OBJS)
但只有在目标文件列表中的第一个文件获取文件夹的名称。
如何将Objects
子文件夹传递给我的清单$(PROD_OBJS)
的所有文件?
编辑
我也试过
PROD_OBJS = $(patsubst %.ss,Object\%.obj, $(PROD_SRC))
,但得到:
makefile(51) : fatal error U1000: syntax error : ')' missing in macro invocation
Stop.
这是很奇怪......
NMA ke是不是 GNUMake,而且相当垃圾。详细信息请参见NMAKE Reference。
至于你的问题出(翻译成1.o 2.o 3.o
d/1.o d/2/o d/3.o
),尝试
OBJS= 1.o 2.o 3.o
# Looks wierd I know, but basically change ' ' to ' d/'
# (and it's not very robust!)
OBJS_WITH_PREFIX= d/$(OBJS: = d/)
!ERROR [$(OBJS_WITH_PREFIX)]
顺便说一句,你的模式规则是骗执行nmake。你说.s.obj:
,它说“这里是如何将一个.s文件转换成.obj”,但然后你给的命令实际上创建了一个子文件夹中的对象。您应该已经开始使用.s{Objects\}.obj:
的模式规则。有关更多详细信息,请参阅文档(规则中的搜索路径)。
谢谢圣诞节前夕的回答。 “我觉得很浪费”,我同意。我切换到GNU make。 – Gauthier 2010-12-25 22:12:34
非常迟到了,但万一别人运行到了同样的问题:
此错误
makefile(51) : fatal error U1000: syntax error : ')' missing in macro invocation
Stop.
由事实patsubst语法似乎并没有引起支持由nmake。您可以通过使用
$(var:suffix=replacement)
,而不是
$(patsubst %suffix,%replacement,$(var))
的替代语法解决这个问题(这也是gnumake的有效)。
我不确定NMAKE与GnuMAKE有多相似,但是您可以尝试在您的VPATH中添加“Objects”对象? ('VPATH:= $(VPATH)Objects')。 VPATH是make实用程序用于搜索目标到规则的路径列表。另外什么是$(PROD_OUT)它是一个单一的文件? – BeeBand 2010-04-20 08:37:46
'nmake'似乎不喜欢':='。 'PROD_OUT'是单个最终输出文件,是的。 – Gauthier 2010-04-20 08:53:24
好吧,也许尝试“VPATH =对象”。如何制定一个规则来生成$(PROD_OUT)目标,例如 '$(PROD_OUT):$(PROD_OBJS)(换行符)(制表符)$(LINK)$(LINK_FLAGS)-o $ @ $ BeeBand 2010-04-20 08:58:28