Python 生成LLVM失败,错误消息为空

Python 生成LLVM失败,错误消息为空,python,windows,cmake,llvm,clang,Python,Windows,Cmake,Llvm,Clang,我正在尝试构建LLVM3.1和Clang3.1。我遵循了《入门指南》——在必要的地方查看存储库,获取Python等等 如果我安装了Python3.3,它会给出一个Python语义错误-来自main import main,没有名为main的模块。如果我安装了Python2.7,它会 CMake Error at CMakeLists.txt:307 (message): Unexpected failure executing llvm-build: Configuring incomple

我正在尝试构建LLVM3.1和Clang3.1。我遵循了《入门指南》——在必要的地方查看存储库,获取Python等等

如果我安装了Python3.3,它会给出一个Python语义错误-
来自main import main
,没有名为
main
的模块。如果我安装了Python2.7,它会

CMake Error at CMakeLists.txt:307 (message):
  Unexpected failure executing llvm-build:
Configuring incomplete, errors occurred!
这是毫无帮助的。关于如何在Windows上构建LLVM和Clang,或者至少尝试确定问题所在,有什么建议吗

请注意,我正在尝试使用VisualStudio2012进行构建,它得到了CMake的正式支持,但在创建LLVM3.1和Clang3.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}
显然应该包含生成错误,但它不包含任何内容。

显然,这主要是一个CMake失败,如果我在安装Python 2.7后清除了缓存,它就会成功。问题有两个方面:

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

其次,与大多数配置/构建工具一样,CMake只检测代码中的依赖项更改,而不检测系统配置中的依赖项更改。因此,如果您尝试构建,然后更改系统,然后再次尝试构建,它将不会注意到更改并相应地调整其配置。它已经配置为使用Python3.3,但它没有注意到您已将其替换为Python2.7,因此出现了问题。您必须强制它重新配置您可以通过清除缓存来完成的操作,但最简单、最干净的答案是只需将/git/untar/which作为一个干净的目录,然后重新开始。(或者,如果您可以像处理许多项目一样从树中构建,只需删除构建目录并重新开始即可。)

最后,根据文档,除非您想运行测试,否则您真的不需要Python来构建llvm和clang。因此,除非文档是错误的(这当然是可能的),否则如果您刚刚完成了一个完全没有Python的干净构建,它就会工作。当您尝试它时它不起作用的原因与安装2.7后它不起作用的原因相同:您处于部分配置状态,它认为它有Python,因此它坚持使用它。

我使用了类似于

"c:\Program Files (x86)\CMake\bin\cmake.exe" -G "Visual Studio 12 2013" -DPYTHON_EXECUTABLE="C:\Python27\python27.exe" -DLLVM_TARGETS_TO_BUILD="X86" ..\llvm-3.5.0.src
这对我很有效。在我的例子中,cmake没有找到python,所以我不得不使用它

-DPYTHON_EXECUTABLE="C:\Python27\python27.exe"

请注意,我没有覆盖我的系统文件夹,那么有相同问题的人应该为命令的每个文件夹使用不同的内容。

首先,我非常确定您确实需要Python 2.x,因此3.3将无法工作,即使文档没有明确说明这一点。(但我可能错了,叮当声发展得很快……)除此之外,您认为这个错误与Python有什么关系?您显示的消息中没有提到Python;它指的是“配置”。(您面前有
CMakeLists.txt
,所以您可以查看第307行,看看它在做什么。)第二,您是否尝试使用Python 3.3进行配置,然后卸载它并安装Python 2.7,然后尝试在不首先清理和重新配置的情况下进行构建?因为它可能只是混淆了它是否可以使用Python。大多数配置系统都不善于在系统同时发生更改时“恢复”配置。最后,正如您链接的文档所表明的,只有在运行测试时才需要Python。如果您计划对Clang或LLVM进行黑客攻击(而不仅仅是使用它们),或者如果您已经安装了一个安装程序,但遇到了神秘的故障,那么您需要运行测试。但除此之外,你不需要这样做。那么,为什么不干脆用Python进行配置呢?@abarnert,不,构建LLVM需要Python。它用于在CMake configure阶段运行llvm构建工具,由于某种原因,它会出错。第307行中发生的是对Python的调用,因此我相当确定它是关于Python的。我没有尝试清除缓存,我现在就这样做。