cmake, add_custom_command avec dépendances à partir d'un autre répertoire
J'ai une question à propos de CMake qui semble être fréquemment posées ici, mais aucune de ces réponses semblent résoudre mon problème.
Dans le details
sous-répertoire, il y a un CMakeLists.txt
qui contient:
add_custom_command(OUTPUT part.out
COMMAND foo --input=part.src --output=part.out
DEPENDS part.src)
add_custom_target(part_out
DEPENDS part.out)
Dans le répertoire principal il y a un CMakeLists.txt
qui utilise part.out
pour la génération d'un autre fichier:
add_custom_command(OUTPUT full.out
COMMAND bar --input=./details/part.out --output=full.out)
add_custom_target(full_out
DEPENDS full.out)
Le problème est que je veux 3 choses ici:
- si
part.out
n'existe pas, il doit être généré - si
part.out
est pas à jour (part.src
est plus récente quepart.out
) je veux qu'il soit régénéré - si
full.out
est pas à jour (part.out
est plus récente quefull.out
, oufull.out
desn existe pas) je veux qu'il soit (re)générés
Donc si j'ajoute DEPENDS ./details/part.out
à add_custom_command(OUTPUT full.out)
je vais atteindre les points 2 et 3, mais pas au point 1, parce que si je supprime part.out
puis-je appeler make full_out
je vais passer une erreur qu'il n'y a pas de règle pour faire ./details/part.out
(comme c'est une règle à partir d'un autre répertoire).
Si j'ajoute DEPENDS full_out
à add_custom_command(OUTPUT full.out)
ou à add_custom_target(full_out)
je vais atteindre les points 1 et 2, pas 3, parce que même si part.out
a été régénéré, un full.out
ne sera pas régénéré, car il ne dépend pas de la part.out
fichier lui-même.
Alors, comment puis-je connecter les deux scénarios?
Je pensais à l'ajout de deux DEPENDS
, mais comment savoir si ça va toujours bien? Je veux dire que dans un tel cas, l'ordre de construire sera question ici.
OriginalL'auteur Michał Walenciak | 2012-11-20
Vous devez vous connecter pour publier un commentaire.
CMake docs pour
add_custom_target
:Donc je suggère à "connecter" les cibles avec
EDIT:
Exemple de travail
Comme il s'est avéré, vous devez définir la source de propriétés de fichier pour
part.out
Voici mon exemple de travail (essayé sous Windows avec VS2008):
CMakeLists.txt:
details/CMakeLists.txt:
Cet exemple travaillé pour tous vos 3 a déclaré des cas.
Hm, je vois. Voir mon extension de réponse pour une solution.
thx, maintenant c'est bon 🙂
J'ai dû ajouter de la TOUS les du pavillon à l'add_custom_target de commande pour obtenir que cela fonctionne.
OriginalL'auteur Johannes S.