首页 > 解决方案 > jamfile:将文件复制到不同的目录

问题描述

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

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

标签: makefilejam

解决方案


问题是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.


推荐阅读