1

我想在 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" ==]

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

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

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

4

1 回答 1

1

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 之类的东西。以您的命令为例,在cmake -E server --pipe=pipe --experimental后台运行后,您可以使用以下命令:

nc -U pipe

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

于 2017-12-09T04:11:15.733 回答