python - 构建 LLVM 失败并显示空错误消息

标签 python windows cmake llvm clang

我正在尝试构建 LLVM 3.1 和 Clang 3.1。我遵循了 Clang's website 中的入门指南- 检查必要位置的存储库,获取 Python 等。

如果我安装了 Python 3.3,它会给出一个 Python 语义错误 - from main import main,没有名为 main 的模块。如果我安装了 Python 2.7,它会给出

CMake Error at CMakeLists.txt:307 (message):
  Unexpected failure executing llvm-build:
Configuring incomplete, errors occurred!

这是最没有帮助的。关于如何在 Windows 上构建 LLVM 和 Clang,或者至少尝试确定问题所在,有什么建议吗?

请注意,我正在尝试使用 Visual Studio 2012 进行构建,它由 CMake 正式支持,但在创建 LLVM 3.1 和 Clang 3.1 时并未发布。

编辑:这是来自 CMakeLists.txt 的必要行

message(STATUS "Constructing LLVMBuild project information")
execute_process(
  COMMAND ${PYTHON_EXECUTABLE} ${LLVMBUILDTOOL}
            --native-target "${LLVM_NATIVE_ARCH}"
            --enable-targets "${LLVM_TARGETS_TO_BUILD}"
            --enable-optional-components "${LLVMOPTIONALCOMPONENTS}"
            --write-library-table ${LLVMCONFIGLIBRARYDEPENDENCIESINC}
            --write-cmake-fragment ${LLVMBUILDCMAKEFRAG}
            ERROR_VARIABLE LLVMBUILDOUTPUT
            ERROR_VARIABLE LLVMBUILDERRORS
            OUTPUT_STRIP_TRAILING_WHITESPACE
            ERROR_STRIP_TRAILING_WHITESPACE
  RESULT_VARIABLE LLVMBUILDRESULT)

# On Win32, CMake doesn't properly handle piping the default output/error
# streams into the GUI console. So, we explicitly catch and report them.
if( NOT "${LLVMBUILDOUTPUT}" STREQUAL "")
  message(STATUS "llvm-build output: ${LLVMBUILDOUTPUT}")
endif()
if( NOT "${LLVMBUILDRESULT}" STREQUAL "0" )
  message(FATAL_ERROR
    "Unexpected failure executing llvm-build: ${LLVMBUILDERRORS}")
endif()

在这里,可以看到${LLVMBUILDRESULT}不好,但是明明应该包含构建错误的${LLVMBUILDERRORS}却什么也没有。

最佳答案

问题有两个:

首先,LLVM 需要 Python 2.x。如果您试图强制它使用 3.3,它将失败。文档可能应该对此有所说明(我在查看时找不到任何引用),但在这个阶段,项目仍然很常见,例如,“Python”或“Python 2.6+”当他们的意思是“2.6-2.7 但不是 3.x”。

其次,与大多数配置/构建工具一样,CMake 仅检测代码中的依赖项更改,而不检测系统配置中的依赖项更改。因此,如果您尝试构建,然后更改您的系统,然后再次尝试构建,它不会注意到更改并相应地调整其配置。它已经配置为使用 Python 3.3,并且没有注意到您已将其替换为 Python 2.7,因此出现了问题。你必须强制它重新配置——你可以通过清除缓存来做到这一点,但最简单和最干净的答案是解压/git/任何你自己的干净目录并重新开始。 (或者,如果您可以像许多项目一样构建树外,只需清除构建目录并重新开始。)

最后,根据文档,你真的不需要 Python 来构建 llvm 和 clang,除非你想运行测试。因此,除非文档有误(这当然是可能的),否则如果您只是在完全不使用 Python 的情况下完成了一个干净的构建,它就可以工作。你试过不行的原因和你安装2.7后不行的原因是一样的:你处于部分配置状态,它认为它有Python,因此它坚持使用它。

关于python - 构建 LLVM 失败并显示空错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13772617/

相关文章:

cmake - 如何在 CMake 中使用 find_package? (例如 : GMP library)

python - sqlalchemy : inserting only a part of a row

python - 用py2neo查询neo4j的写性能

windows - Excel 窗口和用户窗体最小化和最大化函数

windows - 使用 Terraform、Chef 或 Powershell 以编程方式设置 EBS 卷 Windows 驱动器盘符

c++ - 在 windows 和 linux 下用 ifstream 打开二进制 .ply 文件时的不同结果

opencv - 使用 CMake 交叉编译 OpenCV 与 MinGW(在 Linux for Windows 中)

用于复制文件的 Python 脚本

java - Twisted 吞吐量限制降低

CMake如何设置nasm文件扩展名