我的jam文件层次结构如下:
Jamroot中:
lib foo : <file>/SOME/RANDOM/FILE ;
build-project p1 ;
build-project p2 ;
p1中的Jamfile:
lib bar : bar.cpp
p2中的Jamfile:
lib bar2 : bar2.cpp ../p1//bar ..//foo ;
所以bar2依赖于bar和foo使用相对路径。
是否可以在Jamroot中编写单个命令,以便我可以在p2中的Jamfile中编写以下代码?
lib bar2 : bar2.cpp /p1//bar //foo ;
这样会更方便,因为您不再需要考虑相对路径。
我知道有use-project
命令,但是1)我需要为每个子目录编写一个use-project,2)我不知道如何使用use-project声明根文件夹...
谢谢!
答案 0 :(得分:1)
1)您可以使用use-project
自动执行glob
声明并循环播放:
for p in [ glob */[jJ]amfile ]
{
use-project /$(p:P) : ./$(p:P) ;
}
:P
用于获取父目录。有关变量扩展的更多信息here
2)没有使用use-project
为当前项目分配项目ID,而是使用project
完成:
project /root ; # common requirements and other useful things can go here if needed
(link)
我认为//foo
不是目标引用的有效语法。另外,我认为你不能用一些不包含非空项目id(或路径)的目标引用来表示父项目中的目标。
最后你可以在p2的Jamfile中写这个:
lib bar2 : bar2.cpp /p1//bar /root//foo ;