C++ 使用Intel archiver命令而不是ar来增强构建(也称为bjam)

C++ 使用Intel archiver命令而不是ar来增强构建(也称为bjam),c++,bjam,boost-build,icc,C++,Bjam,Boost Build,Icc,当我在英特尔编译器中使用boost build时,使用内置的“英特尔”工具,它在将源代码编译成目标文件时使用icpc,但使用ar生成.a静态库。通常情况下,这是非常好的,因为英特尔自己的archiverxiar主要是ar的包装器 但是,当我在大型应用程序中构建一些(但不是全部)库/模块时,我尝试使用Intel的“过程间优化”(-ipo)选项。我希望它在库/模块内进行优化,而不是在库/模块之间进行优化。为了实现这一点,我必须在制作.a文件时使用xiar或xild-lib,因为ar不理解icpc-i

当我在英特尔编译器中使用boost build时,使用内置的“英特尔”工具,它在将源代码编译成目标文件时使用
icpc
,但使用
ar
生成
.a
静态库。通常情况下,这是非常好的,因为英特尔自己的archiver
xiar
主要是
ar
的包装器

但是,当我在大型应用程序中构建一些(但不是全部)库/模块时,我尝试使用Intel的“过程间优化”(
-ipo
)选项。我希望它在库/模块内进行优化,而不是在库/模块之间进行优化。为了实现这一点,我必须在制作
.a
文件时使用
xiar
xild-lib
,因为
ar
不理解
icpc-ipo
创建的
.o
文件。它认为它成功了,但是它制作的
.a
在链接阶段将失败

如何将boost build用于创建归档文件的命令从默认的
ar
更改为
xiar


我曾尝试在user-config.jam中使用英特尔语句将
(我看到msvc内置工具支持)添加到
,但它似乎被忽略了。我不知道这会影响archiver的选择。

我不得不侵入boost build的内部来实现这一点。如果你需要这个功能,你也可以破解它

/usr/share/boost-build/tools/intel-linux.jam
/usr/share/boost-build/src/tools/intel-linux.jam
(哪个版本的存在可能取决于您的boost-build版本)中,将以下内容添加到文件末尾:

actions piecemeal archive
{
    "xiar" $(AROPTIONS) rc "$(<)" "$(>)"
    "ranlib" "$(<)"
}
动作片段存档
{
“xiar”$(AROPTIONS)rc”$()”

“ranlib”“$”(我不得不侵入boost build的内部来实现这个功能。如果你需要这个功能,你也可以破解它

/usr/share/boost-build/tools/intel-linux.jam
/usr/share/boost-build/src/tools/intel-linux.jam
(哪个版本的存在可能取决于您的boost-build版本)中,将以下内容添加到文件末尾:

actions piecemeal archive
{
    "xiar" $(AROPTIONS) rc "$(<)" "$(>)"
    "ranlib" "$(<)"
}
动作片段存档
{
“xiar”$(AROPTIONS)rc”$()”
“ranlib”$(