建立没有文件名装饰的Boost?

时间:2009-07-05 22:44:15

标签: c++ boost

Boost C ++库的默认命名约定是:

libboost_regex-vc71-mt-d-1_34.lib

其中所有库都内置在同一目录中。我想修改构建过程,以便文件名不包含目标体系结构或构建类型(版本可以)。我希望文件最终位于不同的目录中,具体取决于为其构建的体系结构:

vc71/debug/libboost-1_34.lib

vc71/release/libboost-1_34.lib

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:3)

您可以通过传递“--layout = system”来删除库文件名中的所有装饰。上面的示例显示了“vc71 / release”路径 - 没有开箱即用的方式来获得此布局。你可以用一点hackign做到这一点。在Jamroot中,找到'stage-proper'目标,它将位置指定为:

  <location>$(stage-locate)/lib

您可以修改它以根据属性指定不同的位置,例如:

  <variant>release:<location>$(stage-locate)/lib/release
  <variant>debug:<location>$(stage-locate)/lib/debug

有关更多文档,请参阅Boost.Build website

答案 1 :(得分:0)

我不知道如何使用Boost构建系统做到这一点,但你可以使用一个相当简单的脚本来移动和重命名它们而不会有太多困难。

另一方面,对于大多数Windows编译器,您很少需要关注库文件名,因为对于需要单独二进制文件的库,Boost使用auto-linking

  

大多数Windows编译器和链接器都具有所谓的“自动链接支持”,这消除了第二个挑战。 Boost头文件中的特殊代码检测您的编译器选项,并使用该信息将正确库的名称编码到目标文件中;链接器从您告诉它搜索的目录中选择具有该名称的库。

移动和重命名文件会破坏它。