【发布时间】:2014-07-29 01:21:48
【问题描述】:
我有一个格式如下的生成文件。首先我定义我的输出是什么;
EXEFILES = myexe1.exe myexe2.exe
然后我定义这些输出的依赖关系;
myexe1.exe : myobj1.obj
myexe2.exe : myobj2.obj
然后我有一些宏定义了额外的链接依赖项;
DEP_myexe1 = lib1.lib lib2.lib
DEP_myexe2 = lib3.lib lib4.lib
那么我就有了将.obj转为.exe的目标;
$(EXEFILES):
$(LINK) -OUT:"Exe\$@" -ADDOBJ:"Obj\$<" -IMPLIB:$($($(DEP_$*)):%=Lib\\%)
我想要发生的是(myexe1.exe 的示例)
DEP_$* -> DEP_myexe1
$(DEP_myexe1) -> lib1.lib lib2.lib
$(lib1.lib lib2.lib:%=Lib\\%) -> Lib\lib1.lib Lib\lib2.lib
不幸的是,这不起作用。当我运行make --just-print 时,-IMPLIB: 参数为空。但是,如果我运行 $(warning DEP_$*) 我会得到
DEP_myexe1
当我运行 $(warning $(DEP_myexe1)) 时,我得到了
lib1.lib lib2.lib
所以出于某种原因,make 不喜欢$(DEP_$*) 的组合。也许它不能像这样动态解析宏名称。我该怎么做才能让它发挥作用?有其他选择吗?
【问题讨论】: