jamfile:将文件复制到不同的目录

jamfile: copy files to different directories

SEARCH_SOURCE = $(DDODBC_LIB_DIR) ;
InstallBin [ FDirName $(TOP) $(BUILDDIR) lib ] : $(DDODBC_LIBS) ;
InstallBin [ FDirName $(TOP) $(BUILDDIR) datadirect V7 lib ] : $(DDODBC_LIBS) ;

只有在第二个目录下才能找到从$(DDODBC_LIBS)复制过来的文件。为什么它们没有被InstallBin复制到第一个目录?

问题是 InstallBin 分别 InstallInto 需要定义一个目标(每个源文件),它表示已安装的文件并且是 install 伪目标的依赖项.他们通过简单地使用 grist 设置为 $(INSTALLGRIST) 的源目标名称来做到这一点。因此,第二个 InstallBin 调用定义了相同的目标,重置了目标的位置(LOCATE 目标上的变量)。因此该文件仅安装到第二个位置。

一个简单但不是特别优雅的解决方法是为 InstallBin.

的调用之一重新定义 INSTALLGRIST
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