Отправить запрос на сервер 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, что и раньше, и получать тот же ответ.