2017-06-22 1 views
0

Je voudrais jouer avec le mode serveur cmake à partir de la ligne de commande Linux. La documentation me dit de commencer CMake comme ce qui suit:Envoyer une requête au serveur CMake à partir de la ligne de commande linux

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

Mais pour moi, cela ne fonctionne que de cette façon:

cmake -E server --experimental --debug 

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

J'ai essayé d'envoyer une demande au serveur, mais je reçois seulement bonjour réponse:

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

Comment puis-je envoyer des demandes au serveur cmake?

+0

Au moins, je peux créer un tuyau maintenant par 'cmake -E serveur --pipe = pipe --experimental'. Je ne suis toujours pas en mesure d'obtenir une réponse à ma demande. – erikzenker

Répondre

0

Le serveur CMake sera attend des messages du mode soit --debug ou --pipe dans le format suivant:

[== "CMake Server" ==[ 

... votre message ...

]== "CMake Server" ==] 

La page d'aide du serveur CMake a plus d'exemples, mais voici quelque chose qui vous aidera à démarrer. Pour les exemples suivants, j'ai utilisé CMake 3.10, si vous utilisez une ancienne version, vous devrez peut-être modifier le "protocolVersion":{"major":1} en {"major":0}.

Vous devez également avoir un projet CMake et connaître le répertoire source où se trouve le fichier CMakeLists.txt et un dossier de construction dans lequel les fichiers non arborescents seront placés par cmake.

Si vous souhaitez essayer les indicateurs --debug --experimental, le serveur s'attend à recevoir des entrées de l'entrée standard. Donc, juste après que vous exécutez cmake -E server --debug --experimental, entrez les données suivantes:

[== "CMake Server" ==[ 

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

"generator":"Unix Makefiles"} 

]== "CMake Server" ==] 

Il doit répondre avec un tas d'informations et le dossier de construction devrait maintenant certains fichiers contiennent.

Si vous souhaitez utiliser un tube nommé à la place, vous devrez utiliser quelque chose comme netcat. En utilisant votre commande comme un exemple, après l'exécution du cmake -E server --pipe=pipe --experimental en arrière-plan, vous pouvez utiliser la commande suivante:

nc -U pipe 

À ce stade, nc sera entrée attend dans l'entrée standard, donc vous serez en mesure pour entrer les mêmes messages json que précédemment et obtenir la même réponse.