cquery on windows 好难装啊

用的cygwin64,折腾了一下午,根本装不了,原因应该是llvm没有提供cygwin64位的版本,然后还在stackoverflow上看到一个在cygwin64上编译llvm失败的例子,凉凉,只能期待出预编译版了,希望预编译的要求不要太高,自包含依赖最好了。

感觉还没成熟,需要自己折腾,还是等等吧

是说win10吗 (滑稽

已經很成熟了。你去看cquery的issue:

  • 想要加--cache-dir,這個被initialization option cacheDirectory覆蓋,無必要,不過方便了LanguageClient-neovim,可以省掉settings.json(他自己實現得不考慮語言,所有語言加載同一個設定,本身設計得有問題)
  • 詢問cache directory裏爲什麼有@home``和@@home…`。一個用於專案內檔案,一個用於專案外
  • .cquery是目錄的話不要讀。一些錯誤處理,我沒有看到非常大的必要性
  • vscode c_cpp_properties。我不喜歡vscode,不喜歡笨重的配置,這種東西絕不會加到ccls
  • 一些專案不能索引。如果編譯器不是clang的話,可能需要一些額外選項或者變更compiler driver的名字。大部分是用戶問題。如果不是用戶問題也難以在libclang用戶層面修
  • 他們前段時間加system search path自動推導,出了很多問題。這個問題在於他們不應該試圖在clang用戶層面修(加大量heuristics),clangDriver有很多設定了,但他們不用Clang C++ API。
  • clang-cl mode問題。clang-cl主要給Chrome on Windows用的,當然五月Firefox也宣佈要用了。其他專案支持不好很可能。
  • symlink情況下的補全。我沒有很好的解決方案,稍微加點bfs式樣的heuristic

不建議在Windows上試圖用ccls。<reviews.llvm.org>下載的Windows archive沒有帶Clang C++ headers,你得自行git clone llvm+clang,非開發者折騰起來很困難。

可以联系我,简单啊,下个vs2015就行了,不行邮箱给我,给你个现成的

Are you kidding? 2017 has come out a long time ago. vs2019 also will come soon. BTW, the compiler in vs2015 has too many bugs that don’t conform to the C++ Standard.

关于compiler driver,是什么情况,我看CommonOptionsParser好像是把clang不支持的选项忽略掉的?也就是说如果用了只有gcc支持的选项的话,分析的结果还是会和实际情况有所区别?

有办法通过clangDriver读系统include路径吗?即使设定的编译器是gcc或别的?

ccls沒用clang::tooling::CommonOptionsParser

clang選項有些和gcc語義有差別,不可避免。

ccls HEAD在用clang::CompilerInvocationBase::getHeaderSearchOpts獲取system search paths。

ln -s /usr/bin/clang aarch64-linux-gnu-clang,或者用clang-cl,結果都會有點差別

1 个赞

哎,ccls 我到现在还没解决那个multiple definitions

我不用Windows,不清楚msys2環境。

https://github.com/MaskRay/ccls/issues/23#issuecomment-406335787,我懷疑msys2的thread_local支持有問題。你下載的archive COMDAT支持有問題。那些.a裏的.obj是COFF,沒法用readelf讀,得用objdump llvm-readelf llvm-readobj llvm-objdump。

感谢,我再看看吧

此路不通。

Linux clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz FreeBSD archive也可用,而Windows不能用的原因是缺少include/clang/* include/llvm/* C++ header files。我本來以爲可以用 releases.llvm.org 上下載的archive+source拼湊出來,但build目錄裏生成的header files如include/clang/Config/config.h include/llvm/Config/llvm-config.h不存在。

xxxxxxxxxxxxxxxxxxxx 下面可能還是有一點參考價值

LLVM Download Page 下載

  • LLVM source code
  • Clang source code
  • Clang for Windows (64-bit) (.sig)

下面路徑都要換成Windows風格。我沒法測試,隨便寫寫理論上應該可行的方案

mkdir ~/Dev/llvm-release; cd ~/Dev/llvm-release
7z x /tmp/Downloads/LLVM-6.0.0-win64.exe

mkdir ~/Dev/llvm; cd ~/Dev/llvm
tar xf /tmp/Downloads/llvm-6.0.0.src.tar.xz --strip-component=1
cd tools
mkdir clang; cd clang
tar xf /tmp/Downloads/cfe-6.0.0.src.tar.xz --strip-component=1

RELEASE=$HOME/Dev/llvm-release
LLVM=$HOME/Dev/llvm
cmake -H. -Brelease -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld -DCMAKE_EXPORT_COMPILE_COMMANDS=On -DSYSTEM_CLANG=On -DCMAKE_PREFIX_PATH="$RELEASE;$RELEASE/tools/clang;$LLVM;$LLVM/tools/clang"

-DCMAKE_PREFIX_PATH含義參見 https://github.com/MaskRay/ccls/wiki/Build#link-against-clangllvm-libraries-compiled-from-source Linux鏈接local clang+llvm的方式,

主要是公司的电脑,没有管理员权限。我的邮箱:[email protected] 如果能是静态编译版本或者包含依赖就更好了 非常感谢。

这个在我用来开发的系统上似乎只读取了命令行的HEAD路径,没有检查系统的,什么都不加的话/usr/include都不带找的。。。

  auto CI = std::make_unique<CompilerInvocation>();
  CompilerInvocation::CreateFromArgs(*CI, CCArgs.data(),
                                     CCArgs.data() + CCArgs.size(), Diags);
  CI->getFrontendOpts().DisableFree = false;
  CI->getCodeGenOpts().DisableFree = false;

  HeaderSearchOptions &HeaderOpts = CI->getHeaderSearchOpts();

ccls project.cc現在就是這樣獲得/usr/include

我这里不行,我用gdb打印了一下HeaderOpts,得不到什么信息。。。不过CompilerInvocation可以找到ResourceDir(这个算clang内部规定的目录),这对C语言来说是够了,C++的话就不行了。

這個ResourceDir不能用的,除非你的執行檔放在和clang相同的目錄(和resource dir相對路徑一致)

嗯,这个就是假定你上层有个lib/clang/x.x.x,不过也正常的,这些头文件有很多built-in函数,用别的编译器的话,在某些场合下不是很合适。。。

CompilerInvocation::CreateFromArgs獲取HeaderSearchOptions