有没有办法限制Boost.Build递归扫描#include指令到特定目录或目录集的头文件?即我希望它仅以递归方式扫描项目中的头文件.我知道他们的外部依赖关系不会改变(并且Boost和Qt他们相当大).我最终在依赖树中有大约50,000个目标,这需要一段时间来处理(即使没有实际更改文件,也会导致1-2分钟的构建时间).
到目前为止我发现的唯一解决方案是利用INCLUDE环境变量(我正在使用MSVC) - 这意味着Boost.Build不需要被告知包含路径(我正在使用该功能),因此不扫描它们.这看起来有点像黑客.
我觉得我必须遗漏一些明显的东西,因为我无法找到遇到类似问题的其他人,即使我几乎立即遇到了这个问题.我最近的就在这里.
从调试输出(bjam -d 3)判断它还会多次扫描大多数头文件...我不知道这是否意味着它们被多次添加为依赖项,但肯定是加载一个文件和扫描整个内容必须加起来?
如果我可以告诉它不要打扰扫描一个特定的目录或一组目录,我可以保证头文件不会改变,那将是完美的.
我已经尝试过阅读文档,但这是相当难以理解的,所以我希望有人可能有一个简单的答案.我想基于'debug'定义一个新的'variant',它只是将一些宏定义添加到编译器命令行,例如"-DSOMEMACRO".我想我可以做这个作为调试的"子变体",或者只是定义一个复制'debug'的新变种,但我甚至不确定在哪里做这个.看起来$ BOOST_BUILD_DIR/build中的feature.jam可能就是这个地方.也许我真正想要的只是一个新的"功能",但我仍然不清楚我需要做什么以及在哪里,我不知道'功能'是否允许我将构建产品指向不同的目录到'debug'构建.
任何建议将不胜感激.(如果您想知道,我必须使用bjam,因为它已被采纳为我们的企业标准.)
由于配额限制,我真的需要构建一个项目,我正在处理所有临时文件并在单独的目录中构建产品(在我的例子中/tmp/somewhere).
我习惯用CMake做这件事bjam,如果有的话,怎么可能呢?
我疯了...我正在尝试将我的项目的升级从1.44.0升级到osx雪豹上的1.47.0 .-我想用以下命令构建它:
./b2 macosx-version=10.6 link=static address-model=32_64 threading=multi stage
Run Code Online (Sandbox Code Playgroud)
我希望它能给我一个支持i386以及x86_64的静态胖版本.无论如何,它显然没有,因为如果我查询lipo -info生成的库,它们都是x86_64.-我该怎么做才能解决这个问题?可能是构建脚本坏了吗?
我目前正在使用bjam boost.build作为我的首选C++构建工具.但是使用bjam编程语言对我来说有时候很难并且不直观.
从此我不耐烦地等待boost.build.V2里程碑15," PythonPort "
但即使现在使用Boost.build Milestone 12,当我查看boost-build目录时,我看到python文件与大多数jams匹配.
从此我想知道这些文件是什么,以及是否有一种方法可以在我的bjam中使用当前boost.build版本的python扩展?
我在理解如何使用bjam指定和调用目标时遇到问题.通过这个,我的意思是我想为bjam提供命令行目标来构建(实际上来自Makefile),这些目标对应于构建过程的不同方面,而不仅仅是运行整个事物.
例如,现在当我键入'bjam'时,它会关闭并构建一个python扩展,运行一个单元测试文件,并创建一个单独的'main'可执行文件.我有自定义规则执行每一步,我的Jamfile只是按顺序列出它们:
project-name = example ;
sources =
$(project-name).cpp
$(project-name)_ext.cpp
;
build-ext $(project-name) : $(sources) ;
build-main $(project-name) ;
Run Code Online (Sandbox Code Playgroud)
在我的Jamroot(上一个目录)中我定义了这些规则,这里是不完整的文件:
# A rule to simplify declaration of extension tests:
rule run-test ( test-name : sources + )
{
import testing ;
testing.make-test run-pyd : $(sources) : : $(test-name) ;
}
# A rule to further simply declaration of extension tests:
rule run-ext-test ( project-name )
{
run-test $(project-name) : $(project-name)_ext test_$(project-name)_ext.py ;
}
# A rule to simplify …Run Code Online (Sandbox Code Playgroud) 我正在尝试boost在64位系统上使用Visual Studio 2013 构建Windows 8.1.
b2 toolset="msvc" address-model=64 -s ZLIB_SOURCE=C:\H\M\zlib --build-type=complete stage
Run Code Online (Sandbox Code Playgroud)
这是完整的输出:
Performing configuration checks
- symlinks supported : no
- junctions supported : yes
- hardlinks supported : yes
- arm : no
- mips1 : no
- power : no
- sparc : no
- x86 : yes
- has_icu builds : no
warning: Graph library does not contain MPI-based parallel components.
note: to enable them, add "using mpi ;" to your user-config.jam
- iconv …Run Code Online (Sandbox Code Playgroud) 我可以在Boost.Build上找到大量的通用文档,但令人惊讶的是如何使用它来构建简单的Boost应用程序.
我用bjam编译了Boost for mingw,得到了所有库并包含在C:\ Boost中.现在,基本的Jamroot文件会是什么样的呢?
libs都有复杂的名字,比如'libboost_filesystem-mgw34-mt-s.lib',我确信某处有某种魔术开关可以说'链接libboost_filesystem'!
起初我尝试使用以下命令构建安装了MinGW和Microsoft Visual C++的Boost:
bootstrap.bat mingw
.\b2
Run Code Online (Sandbox Code Playgroud)
在构建过程中,我有大量的日志行,表明正在为Visual C++(msvc)完成构建.所以我停止了它,我完全卸载了Visual C++(使用Windows实用程序),我删除了Boost目录,我从bz2文件重新创建它,我检查了它g++.exe是在PATH中,我重新输入前两个命令重新安装从头开始提升.
我一直在建立一个msvc构建......还有什么我可以做的吗?
Windows控制台
从日志中可以看出,没有选择任何配置:
> .\b2
Building the Boost C++ Libraries.
Performing configuration checks
- 32-bit : no (cached)
- 64-bit : no (cached)
- arm : no (cached)
- mips1 : no (cached)
- power : no (cached)
- sparc : no (cached)
- x86 : no (cached)
- has_icu builds : no (cached)
Run Code Online (Sandbox Code Playgroud)
MinGW控制台
$ ./bootstrap.sh
###
### Using 'gcc' toolset.
###
rm -rf bootstrap
mkdir bootstrap
gcc …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Windows 8.1 上编译由其他人创建的 Kinect v2 点云示例。此 Visual Studio 示例依赖于一个名为
libboost_mpi-vc120-mt-gd-1_57.lib
我用Google搜索了很长时间,但没有找到这个预编译库的可下载版本(有预编译boost库的可下载版本,但它们不包含boost MPI库的二进制文件),所以我决定构建一。每次我尝试构建 boost 库时它都会说
"warning: skipping optional Message Passing Interface (MPI) library.
note: to enable MPI support, add "using mpi ;" to user-config.jam."
Run Code Online (Sandbox Code Playgroud)
我检查的每个论坛以及 boost 文档都说需要修改 user-config.jam 并添加'using mpi;'到其中来编译 mpi 的库。
但是,我无法在 boost 文件夹的任何位置找到名为 user-config.jam 的文件(除了 中的一个 site-config.jam 和一个 user-config.jam pathto\boost_1_57_0\tools\build\example\)。
所有论坛都说应该有 user-config.jampathto\boost_1_57_0\tools\build\但我没有找到。因此,我在该位置创建了自己的 user-config.jam 并将其添加'using mpi;'到该文件中,但它仍然无法编译 mpi 库。我还尝试放入一个 user-config.jampathto\boost_1_57_0并再次安装,pathto\boost_1_57_0但得到相同的结果(即任何地方都没有 MPI 二进制文件)。
我的构建方式如官方文档中所述。尽管文档说没有 user-config.jam 就无法构建 boost,但我实际上能够从 pathto\boost_1_57_0 …
有没有办法获取 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 位置设置为常量 - 因为这在其他方面也可能有用。
我根据文档在windows(8.1)机器上构建了boost(1.56)库,包括共享库和静态库.
所有这些都以BOOST_ROOT/stage/lib以下文件名格式出现在目录中:
boost_thread-vc120-mt-1_56.dll
boost_thread-vc120-mt-1_56.lib
boost_thread-vc120-mt-gd-1_56.dll
boost_thread-vc120-mt-gd-1_56.lib
Run Code Online (Sandbox Code Playgroud)
(这只是线程lib,所有其他库也使用相同的格式)
当我运行cmake时,它抱怨无法找到boost库.
运行它-DBoost_DEBUG=ON表明它查找不同的文件名:
libboost_thread-vc120-mt-s-1_56;
libboost_thread-vc120-mt-s;
libboost_thread-mt-s-1_56;
libboost_thread-mt-s;
libboost_thread
Run Code Online (Sandbox Code Playgroud)
我注意到以下差异:
boost而不是libboostcmake正在搜索的前缀-mt-s知道我怎么能让cmake找到实际文件而不重命名我必须匹配cmake的搜索格式的文件?
谢谢
我正在运行Windows 7 Enterprise SP1并尝试设置C++开发环境.我安装了MinGW,这似乎可以自己正常工作.接下来,我需要安装boost ...似乎唯一不错的选择是从源代码编译.(我没有看到任何官方的Windows二进制文件.我发现了几个非官方的二进制文件,但它们往往是当前的几个版本,并且不清楚它们是否被维护.)
所以我下载了tarball,解压缩,从MinGW打开MSYS shell,转到tools/build/v2并运行bootstrap.sh - 这失败了,bootstrap.log读取如下:
###
### Using 'gcc' toolset.
###
rm -rf bootstrap
mkdir bootstrap
gcc -o bootstrap/jam0 command.c compile.c constants.c debug.c execcmd.c frames.c function.c glob.c hash.c hdrmacro.c headers.c jam.c jambase.c jamgram.c lists.c make.c make1.c object.c option.c output.c parse.c pathsys.c pathunix.c regexp.c rules.c scan.c search.c subst.c timestamp.c variable.c modules.c strings.c filesys.c builtins.c class.c cwd.c native.c md5.c w32_getreg.c modules/set.c modules/path.c modules/regex.c modules/property-set.c modules/sequence.c modules/order.c execunix.c fileunix.c
builtins.c:34:23: fatal error: sys/wait.h: No such file or …Run Code Online (Sandbox Code Playgroud) boost-build ×13
boost ×7
bjam ×6
c++ ×3
mingw ×2
windows ×2
b2 ×1
boost-python ×1
build ×1
cmake ×1
dependencies ×1
fat ×1
installation ×1
macos ×1
makefile ×1
python ×1