代码之家  ›  专栏  ›  技术社区  ›  Remo.D

在jam中定义跨目录依赖项

  •  2
  • Remo.D  · 技术社区  · 16 年前

    在使用make多年之后,我刚刚开始在我的项目中使用jam(实际上是ftjam)。

    在项目工作区中,我有两个目录:

    • src 我在那里构建可执行文件和库
    • test 我的测试程序在哪里

    我试图建立对测试程序的依赖关系,以便每次编译它们时,库也将重新编译(如果需要的话)。

    有什么建议吗?

    2 回复  |  直到 11 年前
        1
  •  2
  •   Remo.D    16 年前

    好吧,这个问题似乎不像我想的那么简单,所以我自己解决了。它使用一个脚本来实现最终的结果,所以我仍然希望一个果酱大师将有一个果酱唯一的解决方案。

    • 使用通用定义在项目的根目录中创建jamrules。

    • 在项目的根目录中创建包含以下内容的jamfile:

        SubDir . ;
        SubInclude . src ;
        SubInclude . test ;
    
    
    • 在src目录中创建jamfile
        SubDir .. src ;
        Library mylib : mylib.c ; 
    
    
    • 在测试目录中创建jamfile
        SubDir .. test ;
        Main mytest : mytest.c ; 
        Depends mytest :  mylib$(SUFLIB) ;
    
    

    使用此设置,只要我在根目录中,每当我尝试构建mytest时,库也将被重新编译(如果需要)。我在干扰机的邮件列表上发现了一条描述它的旧消息。

    唉,如果我在测试子目录中,这就不起作用了,因为jam只能查看 向下 进入子目录。

    所以,我创建了一个简单的脚本 jmk 把它和 jam 可执行文件(以便两者都在路径中):

    if [ "$JMKROOT" = "" ] ; then
       JMKROOT=`pwd`
       export JMKROOT
    fi
    cd $JMKROOT
    jam $*
    

    我将jmkroot环境变量设置为项目的根。

    因为当我在windows shell中编译时(这就是为什么我想使用jam),我只需要使用这个 jmk.bat 批处理文件:

    @echo off
    if "%JMKROOT%" EQU "" set JMKROOT=%CD%
    
    set OLDCD=%CD%
    cd %JMKROOT%
    jam %1 %2 %3 %4 %5 %6 %7 %8 %9
    
    cd %OLDCD%
    
        2
  •  0
  •   wjk    11 年前

    我在用果酱 one of my projects ,我遇到了你的处境。我的可执行程序在 bin 子目录和我的静态库保存在 lib 子目录。

    在我的顶级jamfile中,我输入 SubDir TOP ; . 这将初始化 $(TOP) 变量指向包含此jamfile的目录。然后我添加如下行 SubInclude TOP bin llvm-tblgen SubInclude TOP lib Support ,它将jamfiles的内容添加到 bin/llvm-tblgen lib/Support 去建造。

    在jamfile中 垃圾箱/垃圾箱 ,我输入 SubDir TOP bin llvm-tblgen ; . 我在jamfile里也这么做了 库/支持 但我用 SubDir TOP lib Support ; 相反。进入时的钥匙 SubDir 规则是键入 TOP 到包含这个jamfile的目录。

    然后,当需要设置可执行目标的链接行时,我会引用支持库,如下所示: $(TOP)/lib/Support/libLLVMSupport.a . Jam将此路径扩展到 libLLVMSupport.a ,相对于我运行jam的位置,即使我在 垃圾箱/垃圾箱 从那里手动查找并运行jam。

    这使得管理包含跨目录依赖项的大型项目变得非常容易。与之前的解决方案不同,此解决方案允许您直接运行jam。希望对你有帮助!

    推荐文章
    Jannes V  ·  Webpack URL不正确
    9 年前