Отправить запрос на сервер CMake из командной строки Linux

Я хотел бы поиграть с режимом сервера cmake из командной строки Linux. Документация говорит мне запустить 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?

1 ответ

Сервер CMake будет ожидать сообщения либо --debug или же --pipe режим в следующем формате:

[== "CMake Server" ==[

...твое сообщение...

 ]== "CMake Server" ==]

На странице справки сервера CMake есть больше примеров, но вот кое-что, что поможет вам начать.

Для следующих примеров я использовал CMake 3.10, если вы используете более старую версию, возможно, вам придется изменить "protocolVersion":{"major":1} в {"major":0},

Вам также нужно будет иметь проект CMake и знать исходный каталог, где находится CMakeLists.txt file is и папка сборки, в которую cmake будет помещать файлы из дерева.

Если вы хотите попробовать --debug --experimental flags, сервер будет ожидать ввода от стандартного ввода. Так что сразу после запуска 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, что и раньше, и получать тот же ответ.

Другие вопросы по тегам