我正在挠头,试图找出为什么在我的机器上构建Boost库时不会生成导入库.更具体地说,构建DLL工作正常,但我以前(即在我重新安装我的机器之前)正确生成导入库.
一些规格:
gccMS Dos命令行提示符的工具集构建调用bjam.exe的命令行如下所示:
"C:\.../boost_1_33_1/tools/build/jam_src/bin.ntx86/bjam.exe" --debug-configuration -d2 -q --builddir=C:/.../trunk/XTemp/gcc.debug/boost_1_33_1 toolset=gcc threading=multi define=BOOST_WINDOWS define=_GLIBCXX__PTHREADS linkflags=-shared-libgcc runtime-link=shared variant=debug --v2 linkflags=-out-implib=boost_thread.lib
Run Code Online (Sandbox Code Playgroud)
这曾经很好地工作,并产生了所需的文件boost_thread.lib,但现在不再.我真的不知道发生了什么,我想确切地知道链接器在命令行上收到了什么以及它认为它应该用它做什么.
谢谢,
卡尔
Boost库充满了示例和测试,如果可能的话我想用bjam构建它们.
如何使用bjam构建boost示例?
PS.我无法找到此选项的正确文档.
我正在使用bjam为intel编译器和vs2008构建boost库,我无法分辨从bjam传递给编译器的优化.对于其中一个编译器的gcc,我可以在其中一个bjam文件中看到一些优化,但我找不到我关心的编译器的优化标志.所以,我的问题是 -
在构建Boost二进制库时bjam,可以通过使用该选项的某些值来指定要使用的编译器,而无需指定特定的编译器版本--toolset=.例如:
bjam --with-serialization --toolset=msvc
该工具集值 msvc告诉bjam搜索系统的一些版本的Microsoft Visual C++,然后用它来建立一个数Boost.Serialization库的变种.生成的库将包含一个标记,指示实际使用的工具集.例如,上面的命令创建如下文件:
libboost_serialization-vc100-mt-s-1_44.lib
libboost_serialization-vc100-mt-sgd-1_44.lib
...
Run Code Online (Sandbox Code Playgroud)
其中vc100文件名中的字符串是工具集标记,表示已找到Microsoft Visual C++ 2010编译器版本并用于构建库.[有关Boost库文件命名约定的更多详细信息,请参见此处.]
也可以使用该选项的某些其他值来指定编译器的特定版本--toolset=.例如:
bjam --with-serialization --toolset=msvc-9.0
告诉bjam我,即使我的系统上可能有多个编译器,我希望它专门使用Microsoft Visual C++ 2008.生成的库包含标记字符串vc90,表示使用Microsoft Visual C++ 2008构建它们.
对于Mac上的新编译器,Boost文档似乎有点过时(例如,如何区分GCC,LLVM-GCC和LLVM?)
我的问题是,Mac上的Xcode 3和Xcode 4中的特定编译器版本的其他一些bjam --toolset=值及其相应标签是什么(不是一般的编译器名称值)?这些记录在哪里?即使Boost尚不支持构建具有某些版本的Boost库,是否已指定了和标记值?darwintoolset
请帮助替换???此表中的s:
TOOL AND VERSION --toolset= TAG
====================================================== …Run Code Online (Sandbox Code Playgroud) 我目前正在使用bjam boost.build作为我的首选C++构建工具.但是使用bjam编程语言对我来说有时候很难并且不直观.
从此我不耐烦地等待boost.build.V2里程碑15," PythonPort "
但即使现在使用Boost.build Milestone 12,当我查看boost-build目录时,我看到python文件与大多数jams匹配.
从此我想知道这些文件是什么,以及是否有一种方法可以在我的bjam中使用当前boost.build版本的python扩展?
对不起,如果已经问过这个问题?我从源代码构建了强大的功能,但一直对构建工具感到困惑.从头开始构建boost库时应使用哪个工具.对我来说,似乎bootstrap.sh用于创建bjam可执行文件,然后应该使用bjam来进行实际构建.但是,我注意到你可以将很多参数传递给bootstrap.sh,例如要使用的工具集(编译器)和要构建的库等等......并使用bootstrap.sh启动构建
此外,至少有三种不同的方式来启动构建:./ bootstrap.sh,bjam,b2
有人可以总结每个人的目的,因为在线文档似乎没有解释这一点
谢谢!
安瓦尔
我可以在Boost.Build上找到大量的通用文档,但令人惊讶的是如何使用它来构建简单的Boost应用程序.
我用bjam编译了Boost for mingw,得到了所有库并包含在C:\ Boost中.现在,基本的Jamroot文件会是什么样的呢?
libs都有复杂的名字,比如'libboost_filesystem-mgw34-mt-s.lib',我确信某处有某种魔术开关可以说'链接libboost_filesystem'!
我正在尝试用bjam构建一个库(luabind).我遇到了一个错误,似乎问题是我需要使用gcc 4.2进行编译,但此计算机(Mac OSX)上的默认值为4.0.我宁愿不去改变系统目录中的链接,有没有办法指定bjam使用gcc4.2而不仅仅是gcc?
我正在尝试使用MSVC2010构建Boost 1.49.0,但它失败并出现以下错误:
file bin.v2\libs\math\build\msvc-10.0\release\link-static\runtime-link-static\threading-multi\assoc_laguerre.obj.rsp
"libs\math\build\..\src\tr1\assoc_laguerre.cpp"
-Fo"bin.v2\libs\math\build\msvc-10.0\release\link-static\runtime-link-static\threading-multi\assoc_laguerre.obj"
-Yu"pch.hpp"
-Fp"bin.v2\libs\math\build\msvc-10.0\release\link-static\runtime-link-static\threading-multi\pch.pch"
-TP
/O2
/Ob2
/W3
/GR
/MT
/Zc:forScope
/Zc:wchar_t
/wd4675
/EHs
-c
-DBOOST_ALL_NO_LIB=1
-DBOOST_BUILD_PCH_ENABLED
-DNDEBUG
"-I."
"-Ilibs\math\src\tr1"
compile-c-c++ bin.v2\libs\math\build\msvc-10.0\release\link-static\runtime-link-static\threading-multi\assoc_laguerre.obj
call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 >nul
cl /Zm800 -nologo @"bin.v2\libs\math\build\msvc-10.0\release\link-static\runtime-link-static\threading-multi\assoc_laguerre.obj.rsp"
assoc_laguerre.cpp
c1xx : fatal error C1027: Inconsistent values for /Ym between creation and use of precompiled header
Run Code Online (Sandbox Code Playgroud)
这是该错误的第一个实例,我的日志文件在构建中止之前有995个相同错误的实例.
project-config.jam的内容是:
import option ;
using msvc ;
option.set keep-going : false ;
using python : 3.2 : C:\\Tools\\Python\\3.2.2 ;
Run Code Online (Sandbox Code Playgroud)
我使用的构建命令是:
b2 --toolset=msvc-10.0 --build-type=complete stage …Run Code Online (Sandbox Code Playgroud) 有没有办法获取 Jamroot 文件的位置,以用作项目中另一个 Jamfile 中的常量?
现在,我的 Jamroot 里有这样的东西:
constant HOME : [ os.environ HOME ] ;
constant MYPROJECT_ROOT : $(HOME)/src/myproject ;
Run Code Online (Sandbox Code Playgroud)
然后我可能会在另一个 Jamfile 中执行类似的操作,以允许我包含带有来自项目根目录的路径的标头。
<include>$(MYPROJECT_ROOT)
Run Code Online (Sandbox Code Playgroud)
这尤其令人不满意,因为这意味着如果我与其他人共享此项目,他们必须将其保留在与其相对的完全相同的位置$HOME,否则他们必须更新 Jamroot。
我对执行此特定包含的智能方法感兴趣(而不是我无知的使用常量的初学者方法)。但我也有兴趣按照我要求的方式解决问题 - 通过将 Jamroot 位置设置为常量 - 因为这在其他方面也可能有用。
做以下构建系统:cmake,jam和bjam还生成像qmake那样的makefile吗?MS visual c ++使用什么实用程序来生成make文件?