【发布时间】:2012-11-26 04:39:15
【问题描述】:
我正在尝试构建 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}不包含任何内容。
【问题讨论】:
-
首先,我很确定您确实需要 Python 2.x,因此 3.3 将无法工作,即使文档没有明确说明。 (但我可能是错的——clang 发展得相当快……)除此之外,是什么让你认为这个错误与 Python 有任何关系?您显示的消息中没有提到 Python;它指的是“配置”。 (你前面有
CMakeLists.txt,所以你可以看看第307行,看看它在做什么。) -
其次,您是否尝试使用 Python 3.3 进行配置,然后卸载它并安装 Python 2.7 并尝试构建而不先清理和重新配置?因为它可能只是对它是否可以使用 Python 感到困惑。当系统同时发生变化时,大多数配置系统都不擅长“恢复”配置。
-
最后,正如您链接的文档明确指出的那样,仅当您将运行测试时才需要 Python。如果您打算破解 Clang 或 LLVM(而不仅仅是使用它们),或者如果您已经设置了安装但遇到了神秘的故障,那么您需要运行测试。但除此之外,你不需要。那么,为什么不直接在 Python 中进行配置呢?
-
@abarnert,不,构建 LLVM 需要 Python。它用于在 CMake 配置阶段运行 llvm-build 工具,由于某种原因它会出错。
-
第 307 行发生的是对 Python 的调用,因此我相当肯定它是关于 Python 的。我没有尝试清除缓存,我现在就这样做。
标签: python windows cmake llvm clang