boost bjam 作为 cmake 外部项目失败

boost bjam fails as a cmake external project

我正在尝试将 boost bjam build 添加为外部 cmake 项目。

这是我构建 boost 的 cmake 代码

include(ExternalProject)
ExternalProject_Add(
        libboost
        PREFIX ${BOOST_BUILD_DIRECTORY}
        SOURCE_DIR ${BOOST_SOURCE_DIRECTORY}
        BINARY_DIR ${BOOST_SOURCE_DIRECTORY}
        CONFIGURE_COMMAND ""
        BUILD_COMMAND ${b2Path}
                --build-dir=${BOOST_BUILD_DIRECTORY}
                --link=static
                --variant=debug
                --build-type=complete
        INSTALL_COMMAND ${b2Path}
                --prefix=${BOOST_BUILD_DIRECTORY}/${BoostFolderName}
                --link=static
                --variant=debug
                --build-type=complete
        INSTALL_DIR ${BOOST_BUILD_DIRECTORY}/${BoostFolderName}
        LOG_BUILD ON
        LOG_INSTALL ON
        )
message("boostbuild done")

这里的问题是,偶尔会失败。如果通过命令行调用,bjam 的相同步骤不会失败。

错误是

 type "C:\Users\adhal\AppData\Local\Temp\jam6818c95b4.000" > "C:\build-sdk-Desktop_Qt_5_11_3_MSVC2017_64bit-Debug\external\boost\boost\bin.v2\libs\program_options\build\msvc-14.1\debug\address-model-64\link-static\runtime-link-static\threading-multi\libboost_program_options-variant-vc141-mt-sgd-x64-1_73-static.cmake"

...failed text-action C:\build-sdk-Desktop_Qt_5_11_3_MSVC2017_64bit-Debug\external\boost\boost\bin.v2\libs\program_options\build\msvc-14.1\debug\address-model-64\link-static\runtime-link-static\threading-multi\libboost_program_options-variant-vc141-mt-sgd-x64-1_73-static.cmake...
...skipped <pC:\proj\sdk\external\boost-program-options\stage\lib\cmake\boost_program_options-1.73.0>libboost_program_options-variant-vc141-mt-sgd-x64-1_73-static.cmake for lack of <pC:\build-sdk-Desktop_Qt_5_11_3_MSVC2017_64bit-Debug\external\boost\boost\bin.v2\libs\program_options\build\msvc-14.1\debug\address-model-64\link-static\runtime-link-static\threading-multi>libboost_program_options-variant-vc141-mt-sgd-x64-1_73-static.cmake...
compile-c-c++ C:\build-sdk-Desktop_Qt_5_11_3_MSVC2017_64bit-Debug\external\boost\boost\bin.v2\libs\regex\build\msvc-14.1\debug\address-model-64\link-static\runtime-link-static\threading-multi\regex.obj

当我运行完全相同的步骤时,它没有填充文件(C:\Users\adhal\AppData\Local\Temp\jam6818c95b4.000)。由于是临时文件,所以删除了。

如果我做错了什么,有人可以告诉我吗?是否可以为 bjam 指定一个单独的临时目录?

遇到同样的问题。在我的例子中,向上移动构建文件夹有帮助。

问题检查故事 - tmp .bat 文件包含

键入 "C:\Users\amorozov\AppData\Local\Temp\jam43e8891f.000" > "bin.v2\libs\program_options\build\msvc-14.1\debug\address-model-64\link-static\runtime-link-static\threading-multi\libboost_program_options-variant-vc141-mt-sgd-x64-1_73-static.cmake"

运行 来自 cmake 二进制目录的构建也失败了。将命令拆分为目标目录的 type 和 dir 成功。写入名称较短的文件成功。检查 .cmake 文件的总文件路径长度,超过 256 字节。似乎 cmd 不允许重定向到非常长的路径名。将整个项目向上移动几个目录解决了我的问题。

如果这没有帮助,请在 windbg 下通过 运行 b2 检查您的 tmp .bat 文件,并在 kernel32!DeleteFileW 上设置断点。文件名为 du poi(@esp+4)。希望对您有所帮助。