我有一个有一些要求的项目,其中一个是设置c ++ 11编译器/链接器标志:
jamroot.jam:
project
: requirements
<toolset>clang:<cxxflags>"-stdlib=libc++ -std=c++11"
<toolset>clang:<linkflags>"-lc++"
# ... etc
;
lib mylibrary
: #sources
[ glob source/*.cpp ]
/boost/filesystem
/boost/system
/boost/thread//boost_thread
;
库特定的源是正在使用必要的c ++ 11标志进行编译,但是Boost库提到了不。这导致二进制不兼容性和链接器错误无法结束。
我不想在user-config或命令行中明确指定cxxflags
。我想确保干草根/果酱文件是正确构建项目所必需的。
如何将所需的cxxflags
“传递”到依赖的Boost库?
更新:我最近尝试使用alias
来实现我的目标。来自the docs:
别名规则的另一个用途是更改构建属性。例如,如果要将静态链接用于Boost Threads库,可以编写以下内容:
alias threads : /boost/thread//boost_thread : <link>static ;
然而,为boost_filesystem
设置此项并重建,例如,path.cpp
仍然会省略我正在尝试构建的属性。
答案 0 :(得分:1)
这由setting up a feature解决(感谢Steven Watanabe):
feature.feature cpp11 :
on :
composite optional propagated
;
feature.compose <cpp11>on :
<cxxflags>"-stdlib=libc++ -std=c++11"
<define>BOOST_NO_CXX11_NUMERIC_LIMITS=1
<linkflags>"-lc++"
;
project
: requirements
<cpp11>on
# ... etc
;
显然,这是将变量传播到依赖库的唯一方法。