用的cygwin64,折腾了一下午,根本装不了,原因应该是llvm没有提供cygwin64位的版本,然后还在stackoverflow上看到一个在cygwin64上编译llvm失败的例子,凉凉,只能期待出预编译版了,希望预编译的要求不要太高,自包含依赖最好了。
感觉还没成熟,需要自己折腾,还是等等吧
是说win10吗 (滑稽
已經很成熟了。你去看cquery的issue:
- 想要加
--cache-dir
,這個被initialization optioncacheDirectory
覆蓋,無必要,不過方便了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
,結果都會有點差別
哎,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 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的方式,
这个在我用来开发的系统上似乎只读取了命令行的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