在
LibA/jamfile
我有:
import path ;
SOURCES = [ path.glob-tree src : *.cpp ] ;
lib LibA : $(SOURCES) ;
在
LibB/jamfile
我有:
import path ;
SOURCES = [ path.glob-tree src : *.cpp ] ;
lib LibB : $(SOURCES) ../LibA//LibA/<link>static ;
我遇到的问题是我无法构建目标
LibB
,我有错误:
error: Unable to find file or target named
error: 'src/b_object.cpp'
error: referred to from project at
error: '/D:/dev/DevTools/wrapper_gen/wrapper_gen/test/project/LibA'
这很奇怪,因为
b_object.cpp
包含在LibB/src
中,而不是中的LibB/src
中,所以它应该用于构建
LibA
(情况似乎是这样:“从项目中引用”)。有什么想法吗?
glob-tree
命令!第一个将相对于调用命令的 jamfile 进行搜索。
第二个显然会相对于当前工作目录进行搜索(这可以通过从
b2 ./LibA//LibA
父目录调用
LibA
进行测试)。只有
path.glob-tree
似乎允许指定要搜索的根目录。如果您确实需要此功能,我想您应该使用内置规则path 指定根中 jamfile 目录的路径-常数,像这样:
path-constant LibA_ROOT : . ;
import path ;
SOURCES = [ path.glob-tree "$(LibA_ROOT)/src" : *.cpp ] ;
lib LibA : $(SOURCES) ;
path-constant LibA_ROOT : . ;
的替代方案可以是
LibA_ROOT = "$(MyProject_TOP)/LibA" ;
,并在 jamroot 中定义并导出
MyProject_TOP
(
path-constant MyProject_TOP : . ; modules.poke : MyProject_TOP : $(MyProject_TOP) ;
)我建议您始终像这样使用
path.glob-tree
,以避免在将行复制粘贴到另一个 jamfile 时出现令人困惑的错误。