没有文件名装饰的建筑升级? Boost C++库的默认命名约定为:

没有文件名装饰的建筑升级? Boost C++库的默认命名约定为:,c++,boost,C++,Boost,libboost_regex-vc71-mt-d-1_34.lib 所有库都内置在同一目录中。我想修改构建过程,使文件名不包含目标体系结构或构建类型(版本可以)。我希望该文件最终位于不同的目录中,具体取决于所构建的体系结构: vc71/debug/libboost-1_34.lib vc71/release/libboost-1_34.lib 你知道怎么做吗?我不知道用Boost build系统怎么做,但是你可以用一个相当简单的脚本来移动和重命名它们,不会有太多困难 另一方面,对于大多数Wind

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

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

vc71/debug/libboost-1_34.lib

vc71/release/libboost-1_34.lib


你知道怎么做吗?

我不知道用Boost build系统怎么做,但是你可以用一个相当简单的脚本来移动和重命名它们,不会有太多困难

另一方面,对于大多数Windows编译器,您很少需要关心库文件名,因为对于那些需要单独二进制文件的库,Boost采用了:

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


移动和重命名文件会破坏这一点。

您可以通过传递“--layout=system”来删除库文件名中的所有装饰。上面的示例显示了“vc71/release”路径——没有现成的方法来获得此布局。你可以做一点小动作。在Jamroot中,找到“stage property”目标,该目标将位置指定为:

  <location>$(stage-locate)/lib
$(后台定位)/lib
您可以修改该属性以根据属性指定不同的位置,例如:

  <variant>release:<location>$(stage-locate)/lib/release
  <variant>debug:<location>$(stage-locate)/lib/debug
release:$(后台定位)/lib/release
调试:$(阶段定位)/lib/debug
有关更多文档,请参见

哪里是布局文档?我到处找了找,找不到任何关于它的内容。它在“bjam--help”的输出中。有关详细信息,请参阅此选项。