4

我正在尝试构建 LLVM 3.1 和 Clang 3.1。我遵循了Clang 网站上的入门指南——在必要的地方查看存储库,获取 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}显然应该包含构建错误不包含任何内容。

4

3 回答 3

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/whatever你自己一个干净的目录并重新开始。(或者,如果您可以像许多项目一样在树外构建,只需清除构建目录并重新开始。)

最后,根据文档,你真的不需要 Python 来构建 llvm 和 clang,除非你想运行测试。所以,除非文档是错误的(这当然是可能的),如果你刚刚完成了一个完全没有 Python 的干净构建,它会工作的。试了没用的原因和你安装2.7后没用的原因是一样的:你是部分配置的状态,它以为有Python,所以坚持用它。

于 2012-12-10T00:43:50.497 回答
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"

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

于 2014-10-28T21:42:06.520 回答
0

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

于 2012-12-08T19:06:43.937 回答