2010-12-29 3 views
1

Nous avons quelques bibliothèques de dépendances dans notre référentiel. La partie principale est construite avec cmake. Maintenant, les cmake-makefiles doivent construire les bibliothèques de dépendances, qui n'ont pas de système de construction cmake. Pour une bibliothèque spécifique, il y a un "Makefile.squirrel" qui devrait être utilisé. Le CMakeLists.txt pour cette bibliothèque:CMake & ExternalProject: Impossible de trouver le fichier spécifique

cmake_minimum_required (VERSION 2.8) 

include(ExternalProject) 

ExternalProject_Add(squirrel, 
    SOURCE_DIR "./" 
    UPDATE_COMMAND "" 
    BUILD_IN_SOURCE 1 
    CONFIGURE_COMMAND "" 
    BUILD_COMMAND "make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel" 
    INSTALL_COMMAND "" 
    ) 

Cependant, lors de l'exécution faire je reçois un message d'erreur:

[ 93%] Performing build step for 'squirrel,' 
/bin/sh: make -f /home/enrico/projekte/projectname/dependencies/SQUIRREL2/Makefile.squirrel: not found 
make[2]: *** [dependencies/SQUIRREL2/squirrel,-prefix/src/squirrel,-stamp/squirrel,-build] Error 127 
make[1]: *** [dependencies/SQUIRREL2/CMakeFiles/squirrel,.dir/all] Error 2 
make: *** [all] Error 2 

ls -LA sur /home/enrico/Projekte/ProjectName/dépendances /SQUIRREL2/Makefile.squirrel indique que le fichier existe.

Le codage en dur du chemin du fichier (pas une option pour la solution) ne fonctionne pas non plus.

des idées ou des conseils?

Merci, Enrico

Répondre

0

Vous pouvez essayer d'écrire un script qui appelle conclurai avec la makefile correcte. Exportez simplement CMAKE_CURRENT_SOURCE_DIR vers une variable d'environnement que le script lit.

+0

J'ai eu la même idée quelques heures après posté. J'ai créé un script shell séparé qui est appelé par BUILD_COMMAND. Fonctionne pour l'instant mais "se sent" comme un hack. Et j'en ai besoin de plus pour le reste des dépendances ... – Enrico

3

Trois observations:

1) Vous utilisez "écureuil", comme le nom du projet. Les arguments des fonctions CMake sont séparés par des espaces, donc la virgule fait partie du nom que vous avez donné. (Probablement pas ce que vous voulez.)

2) Vous devez utiliser:

SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" 

plutôt que

SOURCE_DIR "./" 

Parce que le "./" est tout simplement par rapport à ce nom de chemin complet de toute façon.

3) La véritable source de votre problème est votre valeur BUILD_COMMAND:

BUILD_COMMAND "make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel" 

Il faut lire:

BUILD_COMMAND make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel 

Si vous avez les guillemets là, le shell est à la recherche d'une réelle fichier nommé "make -f .../Makefile.squirrel" car CMake analyse les arguments par espaces, mais les guillemets indiquent à CMake "c'est exactement un argument qui inclut des espaces ..." S'il y a des espaces dans la valeur étendue de $ {CMAKE_CURRENT_SOURCE_DIR} alors CMake va correctement double citation (ou échapper, dépend g sur la plate-forme/shell) quand il génère la commande dans ses makefiles générés.

Questions connexes