8
votes

Exécuter la commande après une étape de génération dans cmake

J'ai un outil de ligne de commande qui devrait être exécuté après que Clake a créé mon fichier .sln. Y a-t-il un moyen de le faire en utilisant CMAKE?

Utilisation de Execute_Process (commande ..) à la fin de la CMAKELIST.TXT ne vous aide pas car ceci est exécuté après l'étape de configuration, cependant, le fichier .sln est créé dans l'étape de génération.

Merci beaucoup!


0 commentaires

3 Réponses :


-1
votes

Oui, add_custom_command Couté avec add_custom_target obtenu ceci couvert


3 commentaires

Peut-être que je ne comprends pas ce que vous voulez dire, mais aussi loin que je peux dire, avec ces commandes, il n'est possible que d'exécuter un outil pendant la construction. (J'utilise Visual Studio et le processus fonctionne comme suit: Je frappe "Build" -> Clake génère le nouveau fichier .sln s'il y avait des modifications -> La macro VS me demande si je veux recharger la solution - >> J'appuie sur Oui -> Construction de la solution Starts -> La cible personnalisée est exécutée. Si maintenant ma commande modifie la solution, je dois recharger à nouveau ce que je veux éviter. Je préfère modifier le fichier de solutions pendant la phase de génération de CUKE.)


Oh maintenant, je comprends, vous voulez exécuter votre commande toujours dans le temps de cumake, mais une fois le fichier de solution généré. Dans ce cas, les commandes que j'ai mentionnées, qui sont censées exécuter des programmes pendant le temps de construction, ne sont en effet pas ce que vous recherchez. Je ne sais pas s'il y a un tel crochet de la génération, car il s'agit de la dernière phase du temps de cumake.


Je vous suggère de poser votre question à la liste de diffusion CLAKE et à expliquer ce que vous essayez de faire plus en détail. Afaik Les devs de base ne suivent pas trop de près.



1
votes

Un moyen plutôt horrifiant de le faire consiste à appeler CMAKE de CMAKE et à effectuer les trucs post-générer sur la sortie du script parent.

option(RECURSIVE_GENERATE "Recursive call to cmake" OFF)

if(NOT RECURSIVE_GENERATE)
    message(STATUS "Recursive generate started")
    execute_process(COMMAND ${CMAKE_COMMAND}
        -G "${CMAKE_GENERATOR}"
        -T "${CMAKE_GENERATOR_TOOLSET}"
        -A "${CMAKE_GENERATOR_PLATFORM}" 
        -DRECURSIVE_GENERATE:BOOL=ON 
        ${CMAKE_SOURCE_DIR})
    message(STATUS "Recursive generate done")

    # your post-generate steps here

    # exit without doing anything else, since it already happened
    return()
endif()

# The rest of the script is only processed by the executed cmake, as it 
# sees RECURSIVE_GENERATE true

# all your normal configuration, targets, etc go here


0 commentaires

0
votes

À partir des liens suivants, il semble qu'il n'y ait aucune commande de ce type pour spécifier l'exécution après que les fichiers .SLN générés par CMAe.


1 commentaires

Cela se brisera lorsque Clake remercie automatiquement après la mise à jour du fichier CMAKELIST (par exemple, si vous tirez ou à la caisse).