无法链接到另一个 jamfile 中定义的目标,相关源跨项目混合?

问题描述 投票:0回答:1

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
(情况似乎是这样:“从项目中引用”)。

有什么想法吗?

bjam boost-build b2 jam
1个回答
0
投票
b2 中存在两个不同的

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 时出现令人困惑的错误。

© www.soinside.com 2019 - 2024. All rights reserved.