使用 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".
其他一切都安装正常,其他库,headers 都在那里,是的,我 运行 visual studio 在管理员模式下只是为了确保复制文件没有问题周围等。这是完整的错误:
我已经仔细检查过相同的路径,文件存在我已经尝试进入相应的 cmake 安装并将斜杠更改为 backward-slashes 仍然没有成功。我可以在那里手动复制库,但我不确定我还需要复制什么以及我试图正确解决它的原因。我离开了主干,但看起来我的问题已经消失了一段时间:
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 触发 INSTALL 目标而不需要打开 visual studio,这似乎可以解决问题。
从 CMake 构建我只是做了:
cmake --build . --config Release --target ALL_BUILD
cmake --build . --config Release --target INSTALL
总而言之,这种方式实际上要快得多,因为您避免了 VS 为索引等所做的所有辅助工作。
对于现在回答这个问题的任何人:Marco Giordanos 的回答几乎帮我解决了,但我必须先采取一些额外的步骤(这对我来说并不明显):
- 确保 Visual Studio 在路径中,并且
- 将 CMake 添加到路径
第一个是通过 运行 "Developer Command Prompt for VS2017" 而不是常规命令提示符解决的,但我相信还有其他方法可以实现。第二个(假设典型的CMake安装路径):
set PATH=C:\Program Files\CMake\bin;%PATH%
这可以通过添加以下 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 项目。谢谢!
更新
未提交此修正。代码片段在这里给出,希望它有用。
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()
我目前在 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".
其他一切都安装正常,其他库,headers 都在那里,是的,我 运行 visual studio 在管理员模式下只是为了确保复制文件没有问题周围等。这是完整的错误:
我已经仔细检查过相同的路径,文件存在我已经尝试进入相应的 cmake 安装并将斜杠更改为 backward-slashes 仍然没有成功。我可以在那里手动复制库,但我不确定我还需要复制什么以及我试图正确解决它的原因。我离开了主干,但看起来我的问题已经消失了一段时间:
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 触发 INSTALL 目标而不需要打开 visual studio,这似乎可以解决问题。
从 CMake 构建我只是做了:
cmake --build . --config Release --target ALL_BUILD
cmake --build . --config Release --target INSTALL
总而言之,这种方式实际上要快得多,因为您避免了 VS 为索引等所做的所有辅助工作。
对于现在回答这个问题的任何人:Marco Giordanos 的回答几乎帮我解决了,但我必须先采取一些额外的步骤(这对我来说并不明显):
- 确保 Visual Studio 在路径中,并且
- 将 CMake 添加到路径
第一个是通过 运行 "Developer Command Prompt for VS2017" 而不是常规命令提示符解决的,但我相信还有其他方法可以实现。第二个(假设典型的CMake安装路径):
set PATH=C:\Program Files\CMake\bin;%PATH%
这可以通过添加以下 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 项目。谢谢!
更新
未提交此修正。代码片段在这里给出,希望它有用。
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()