从 Linux 命令行向 CMake 服务器发送请求

Send request to CMake server from the Linux command line

我想从 Linux 命令行尝试 CMake 服务器模式。文档告诉我像下面这样启动 CMake:

cmake -E server (--debug|--pipe <NAMED_PIPE>)

但对我来说它只能这样工作:

cmake -E server --experimental --debug

[== "CMake Server" ==[
{"supportedProtocolVersions":[{"isExperimental":true,"major":1,"minor":0}],"type":"hello"}
]== "CMake Server" ==]

我试图向服务器发送请求,但我只收到问候响应:

cat request.txt | cmake -E server --experimental --debug
[== "CMake Server" ==[
{"supportedProtocolVersions":[{"isExperimental":true,"major":1,"minor":0}],"type":"hello"}
]== "CMake Server" ==]

如何向 CMake 服务器发送请求?

CMake 服务器将期待以下格式的 --debug--pipe 模式的消息:

[== "CMake Server" ==[

...您的留言...

 ]== "CMake Server" ==]

CMake 服务器帮助页面有更多示例,但这里有一些可以帮助您入门的内容。

对于以下示例,我使用的是 CMake 3.10,如果您使用的是旧版本,则可能需要将 "protocolVersion":{"major":1} 修改为 {"major":0}

您还需要有一个 CMake 项目,并知道 CMakeLists.txt 文件所在的源目录,以及 cmake 将放置树外文件的构建文件夹。

如果您想尝试 --debug --experimental 标志,服务器将期望从标准输入中获取输入。所以在 运行 cmake -E server --debug --experimental 之后输入以下内容:

[== "CMake Server" ==[

{"cookie":"yummy","type":"handshake","protocolVersion":{"major":1},
    "sourceDirectory":"/path/to/CMakeList.txt","buildDirectory":"/path/to/build/folder",

"generator":"Unix Makefiles"}

]== "CMake Server" ==]

它应该返回一堆信息并且构建文件夹现在应该包含一些文件。

如果您想改用命名管道,则必须使用 netcat 之类的工具。以你的命令为例,在后台运行ning cmake -E server --pipe=pipe --experimental后,你可以使用如下命令:

nc -U pipe

此时,nc 也将期待标准输入中的输入,因此您将能够像以前一样输入相同的 json 消息并获得相同的响应。