2012-12-07 85 views
3

我試圖構建LLVM 3.1和Clang 3.1。我跟着從Clang's website入門指南 - 檢查出庫在必要的地方,讓Python等構建LLVM失敗,並顯示空的錯誤消息

如果我已經安裝了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}這顯然應該包含生成錯誤不包含任何東西。

+0

首先,我非常確定你確實需要Python 2.x,所以3.3不會工作,即使文檔沒有明確地說明這一點。 (但是我可能是錯的,clang發展得非常快......)除此之外,是什麼讓你認爲這個錯誤與Python有什麼關係?你展示的信息中沒有提到任何Python;它是指「配置」。 (你有'CMakeLists.txt'在你面前,所以你可以看看第307行,看看它在做什麼。) – abarnert

+0

其次,你是否嘗試用Python 3.3進行配置,然後卸載並安裝Python 2.7並嘗試構建沒有清理和重新配置?因爲它可能會讓人困惑它是否可以使用Python。當系統同時發生變化時,大多數配置系統在「恢復」配置時都不好。 – abarnert

+0

最後,正如您鏈接的文檔要明確說明的那樣,只有在您將運行測試時才需要Python。如果你計劃攻擊Clang或LLVM(而不是僅僅使用它們),或者如果你已經安裝了一個安裝程序,但你遇到了神祕的故障,那麼你想運行測試。但除此之外,你不需要。那麼,爲什麼不直接不用Python配置呢? – abarnert

回答

3

後清除緩存它會成功,問題有兩方面:

首先,LLVM需要Python 2.x的。如果你試圖強制它使用3.3,它會失敗。文檔可能應該說一些關於這個(當我查看時我找不到任何引用),但是在這個階段,項目仍然很常見,比如說「Python」或「Python 2.6+」時他們的意思是「2.6-2.7但不是3.x」。其次,與大多數配置/構建工具一樣,CMake只檢測代碼中的依賴性更改,而不檢測系統配置。因此,如果您嘗試構建,然後更改您的系統,然後嘗試再次構建,它不會注意到更改並相應地調整其配置。它已經被配置爲使用Python 3.3,並沒有注意到你已經用Python 2.7取代了它,因此是問題所在。你必須強制它重新配置 - 你可以通過清除緩存來做到這一點,但最簡單和最乾淨的答案是隻需解壓/ git /無論你自己是乾淨的目錄並重新開始。 (或者,如果可以通過很多項目構建out-of-tree,就可以刪除構建目錄並重新開始。)

最後,根據文檔,您確實不需要Python建立llvm和clang,除非你想運行測試。所以,除非文檔錯誤(當然這是可能的),如果你剛完成了一個完全沒有Python的乾淨版本,它就可以工作。當你嘗試使用它時,它沒有工作的原因與安裝2.7後無法使用的原因相同:你處於部分配置狀態,它認爲它有Python,因此它堅持使用它。

0

顯然,這是一個失敗的CMake爲主,如果我安裝Python 2.7

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沒有發現蟒蛇,所以我只好用

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

注意,我並沒有覆蓋我的系統文件夾,然後有人用同樣的問題,應該使用一些對命令的每個文件夾不同。

相關問題