构建LLVM失败,显示空错误消息

时间:2012-12-07 23:24:54

标签: 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}不包含任何内容。

3 个答案:

答案 0 :(得分:4)

问题是双重的:

首先,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,因此它坚持使用它。

答案 1 :(得分:2)

我使用了像

这样的东西
"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"

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

答案 2 :(得分:0)

显然,这主要是一个CMake失败,如果我在安装Python 2.7之后清除了缓存,它就会成功

相关问题