簡體   English   中英

使用 CMake 和 Visual Stuidio 構建 LLVM 無法安裝,

[英]Building LLVM with CMake and Visual Stuidio fails to install,

我目前在 windows 下構建 llvm + compiler-rt 時遇到問題。 我正在使用最新的 vs 2017 社區和 cmake 來生成解決方案。 一切都很順利。

然后我按照說明進行操作,一切都建立起來了。 我遇到的問題是在安裝時; 我收到以下錯誤:

file INSTALL cannot find
77>  "F:/WORK_IN_PROGRESS/compile/build/$(Configuration)/lib/clang/6.0.0/lib/windows/clang_rt.builtins-x86_64.lib".

其他一切都安裝得很好,其他庫,頭文件都在那里,是的,我在管理模式下運行 Visual Studio 只是為了確保復制文件周圍沒有問題等。這是完整的錯誤:

我已經仔細檢查並且相同的路徑有效,文件存在我試圖進入相應的 cmake 安裝並將斜杠更改為反斜杠仍然沒有運氣。 我可以在那里手動復制庫,但我不確定我還需要復制什么以及這就是我試圖正確解決它的原因。 我離開了主干,但看起來我的問題已經消失了一段時間:

77>CMake Error at projects/compiler-rt/lib/builtins/cmake_install.cmake:34 (file):
77>  file INSTALL cannot find
77>  "F:/WORK_IN_PROGRESS/compile/build/$(Configuration)/lib/clang/6.0.0/lib/windows/clang_rt.builtins-x86_64.lib".
77>Call Stack (most recent call first):
77>  projects/compiler-rt/lib/cmake_install.cmake:33 (include)
77>  projects/compiler-rt/cmake_install.cmake:33 (include)
77>  projects/cmake_install.cmake:32 (include)
77>  cmake_install.cmake:64 (include)
77>

另外,作為旁注,安裝過程似乎正在嘗試訪問 vs 2017 的一個奇怪的舊可再發行組件,我無法安裝它,即使在清除安裝程序之后它也會失敗,因為有一個新的。 任何有關此事的幫助將不勝感激

干杯

這可以通過添加以下 CMake 代碼行來解決:

string(REGEX REPLACE "\\$\\(Configuration\\)" "$<CONFIG>" output_dir "${output_dir}")

這里:

https://github.com/llvm/llvm-project/blob/1692c2fdaacc628cf19638025727496397e52c5a/compiler-rt/cmake/Modules/AddCompilerRT.cmake#L12

通過此修復,我成功編譯並安裝了帶有 Visual Studio 2017 的 LLVM 10。

我是 LLVM 新手。 熟悉 LLVM 貢獻的人可能會幫助我將此修復提交給 llvm-project。 謝謝!

更新

未提交此修復程序。 這里給出了代碼片段,希望它有用。

if(CMAKE_CONFIGURATION_TYPES)
  string(REGEX REPLACE "\\$\\(Configuration\\)" "$<CONFIG>" output_dir "${output_dir}")   # <--- The added line
  foreach(build_mode ${CMAKE_CONFIGURATION_TYPES})
    string(TOUPPER "${build_mode}" CONFIG_SUFFIX)
    set_target_properties("${target}" PROPERTIES
        "ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_SUFFIX}" ${output_dir}
        "LIBRARY_OUTPUT_DIRECTORY_${CONFIG_SUFFIX}" ${output_dir}
        "RUNTIME_OUTPUT_DIRECTORY_${CONFIG_SUFFIX}" ${output_dir})
  endforeach()
else()
  set_target_properties("${target}" PROPERTIES
      ARCHIVE_OUTPUT_DIRECTORY ${output_dir}
      LIBRARY_OUTPUT_DIRECTORY ${output_dir}
      RUNTIME_OUTPUT_DIRECTORY ${output_dir})
endif()

我一直在為此奮斗,但目前,我有一個解決方法。 訣竅是直接從 CMake 觸發 INSTALL 目標,而無需打開 Visual Studio,這似乎可以解決問題。

從 CMake 構建我只是做了:

cmake --build . --config Release --target ALL_BUILD
cmake --build . --config Release --target INSTALL

總而言之,這種方式實際上要快得多,因為您避免了 VS 為索引等所做的所有副業。

對於現在提出這個問題的任何人:Marco Giordanos 的回答幾乎為我做到了,但我必須先采取一些額外的步驟(這對我來說並不明顯):

  1. 確保 Visual Studio 在路徑中,並且
  2. 將 CMake 添加到路徑

第一個是通過運行“VS2017 的開發人員命令提示符”而不是常規命令提示符來解決的,但我相信還有其他方法可以實現這一點。 第二個(假設典型的 CMake 安裝路徑):

set PATH=C:\Program Files\CMake\bin;%PATH%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM