1.安装cmake-language-server
使用pip install 安装 cmake-language-server
bash
python -m pip install --user cmake-language-server --user
安装目录在~/AppData\Roaming\Python\Python312\Scripts\cmake-language-server.exe
2.在 Eclipse中新增 External Tool launch configuration
- 名称:CMake Language Server
- 类型:org.eclipse.ui.externaltools.ProgramLaunchConfigurationType
- Location:cmake-language-server.exe 的绝对路径
- Arguments:留空
- Working directory:${workspace_loc}或留空
- Console:关闭显示,但保留 stdout/stderr 给 LSP4E 使用


3.新增一个content-type
Preference->General->Content Types
点击Add Root,输入content-type的名字为cmake
File associations处点击Add,输入CMakeLists.txt
Associated editors处点击Add, 选择Generic Code Editor

4.映射content-type和launch configuration
Preference->Language Server
点击Add,
Associate content-type选择cmake,
Language Server Launch Configuration选择Program下面的CMake Language Server
右下角选择run模式

5.问题解决
5.1pygls.exceptions.JsonRpcInvalidParams: Invalid Params
当打开CMakeLists.txt时,控制台输出如下报错
bash
File "C:\Users\enjing.guo\AppData\Roaming\Python\Python312\site-packages\pygls\protocol\json_rpc.py", line 344, in _deserialize_message
raise JsonRpcInvalidParams() from exc
pygls.exceptions.JsonRpcInvalidParams: Invalid Params

问题在于:LSP4E 2026 发给 server 的初始化能力里,documentSymbol.tagSupport.valueSet 包含了 1...26,但 cmake-language-server 用的 lsprotocol 2023 只接受 SymbolTag = 1,所以初始化阶段直接 Invalid Params。
问题解决
- 新增cmake_language_server_compat.py
将该文件放到C:\1\eclipse-cpp-2026-06-R\workspace3\.metadata\.plugins\org.eclipse.lsp4e\目录下
python
import argparse
import logging
from typing import Any
from cmake_language_server import __version__
from cmake_language_server.server import CMakeLanguageServer
from lsprotocol.types import SymbolTag
from pygls.protocol.language_server import LanguageServerProtocol
from pygls.server import default_converter
def converter_factory() -> Any:
converter = default_converter()
# LSP4E 0.19 sends a broad documentSymbol.tagSupport.valueSet during
# initialize. lsprotocol 2023 models SymbolTag as only {Deprecated: 1} and
# rejects the other advertised values before the server can initialize.
converter.register_structure_hook(SymbolTag, lambda _value, _type: SymbolTag.Deprecated)
return converter
def main() -> None:
parser = argparse.ArgumentParser(description="CMake Language Server")
parser.add_argument(
"--version", action="version", version=f"%(prog)s {__version__}"
)
parser.parse_args()
logging.basicConfig(level=logging.INFO)
logging.getLogger("pygls").setLevel(logging.WARNING)
CMakeLanguageServer(
"cmake-language-server",
__version__,
None,
LanguageServerProtocol,
converter_factory,
).start_io()
if __name__ == "__main__":
main()
-
修改CMake Language Server这个LaunchConfiguration
修改Location为C:\Python312\python.exe
修改Arguments为"C:\1\eclipse-cpp-2026-06-R\workspace3.metadata.plugins\org.eclipse.lsp4e\cmake_language_server_compat.py"

-
重新打开eclipse,可以看到CMakeLists.txt编辑器的语法支持已经正常了
