问题是InstallBin
分别InstallInto
需要定义一个目标(每个源文件),它代表已安装的文件并且是install
伪目标的依赖项。他们只需使用源目标名称并将 grist 设置为$(INSTALLGRIST)
. 所以第二次InstallBin
调用定义了相同的目标,重置目标的位置(目标LOCATE
上的变量)。因此,该文件仅安装到第二个位置。
一个简单(如果不是特别优雅)的解决方法是重新INSTALLGRIST
定义InstallBin
.
SEARCH_SOURCE = $(DDODBC_LIB_DIR) ;
InstallBin [ FDirName $(TOP) $(BUILDDIR) lib ] : $(DDODBC_LIBS) ;
oldInstallGrist = $(INSTALLGRIST) ;
INSTALLGRIST = $(INSTALLGRIST)2 ;
InstallBin [ FDirName $(TOP) $(BUILDDIR) datadirect V7 lib ] : $(DDODBC_LIBS) ;
INSTALLGRIST = $(oldInstallGrist) ;
如果您需要更频繁地这样做,更优雅的解决方案是创建一个INSTALLGRIST
从安装目录派生值的包装器规则:
rule InstallBinSafe
{
local INSTALLGRIST = installed-$(1:G=) ;
InstallBin $(1) : $(2) ;
}
然后只需使用该规则而不是InstallBin
.