2016-09-26 2 views
0

J'utilise Ubuntu Linux.Exécution de cscope à partir de CMake au moment de la construction

J'ai essayé d'exécuter la commande cscope suivante lorsque j'ai lancé "make" à partir de mon répertoire de projet, donc il recompile cscope et obtient des informations de nom mises à jour lorsque je fais mon projet.

cscope -b -q -U -R

Par mes recherches et un peu de lecture, je devrais être en mesure d'obtenir CMake pour exécuter une commande lorsque vous ne « faire » en utilisant la fonction add_custom_command dans CMakeLists.txt. Cependant, de nombreuses tentatives et variantes de celui-ci n'ont pas été couronnées de succès. Est-il possible de courir comme je le veux avec add_custom_command?

simplement faire cela ne semble pas fonctionner:

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cscope.in.out ${CMAKE_CURRENT_BINARY_DIR}/cscope.out ${CMAKE_CURRENT_BINARY_DIR}/cscope.po.out COMMAND cscope -b -q -U -R)

J'ai essayé d'utiliser la surcharge TARGET add_custom_command ainsi, et de faire une cible personnalisée avec une dépendance de chaque ALL ou la principale fichier de sortie du projet, mais cela ne fait rien non plus.

Idéalement, cela fonctionnerait après que le projet a été construit, si je pouvais me dire ce que je fais de mal ou si c'est vraiment le cas de le faire, je vous en serais reconnaissant?

+1

'add_custom_command' est inutile tant que ** cible ** ne dépend pas du fichier produit par la commande. – Tsyvarev

+0

Avez-vous vérifié la dernière documentation ['add_custom_command'] (https://cmake.org/cmake/help/latest/command/add_custom_command.html)? – Antonio

Répondre

2

J'ai essayé d'utiliser la surcharge TARGET add_custom_command ainsi, et de faire une cible personnalisée avec une dépendance de chaque ALL ou le fichier de sortie principal du projet, mais cela ne fait rien non plus.

Cela semble être le problème - lorsqu'un CMake commandes nécessite d'être passé une cible, ils se réfèrent au nom d'une cible que vous avez créé précédemment en utilisant l'une des add_executable, add_library ou add_custom_target, qui ne correspond pas nécessairement à un fichier d'artefact réel généré par la commande.

Voici mon point de vue sur le problème, et il semble générer les trois fichiers cscope dans le répertoire de construction.

cmake_minimum_required(VERSION 3.3 FATAL_ERROR) 
project(te) 

add_executable(main main.cpp asdf.cpp) 
add_custom_command(TARGET main POST_BUILD COMMAND cscope -b -q -U -R) 

Notez ici que le nom de la cible est ici tout ce que j'ai passé comme premier argument à la commande add_executable.

+0

C'est la bonne réponse tant que POST_BUILD est acceptable. Sinon, une cible dépendant de l'un des fichiers 'OUTPUT' de' add_custom_command' déclenchera la commande avant d'être compilé. – Antonio