La construction d'une bibliothèque à l'aide d'autotools de cmake
Ceci est mon premier essai avec cmake et j'aimerais avoir, si possible, des retours sur ce que j'ai fait depuis que certains problèmes subsistent.
Dans le CMakeLists.txt du dossier de bibliothèque, j'ai créé deux makefile objectifs: configure-antlr3c
et antlr3c
. La première cible exécute les autotools configuration d'un script shell, le second exécute le rendre exécutable à la construction de la bibliothèque:
# CMakeLists.txt in libantlr3c-3.1.3
add_custom_target(
configure-antlr3c
${SHELL_EXECUTABLE} configure
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_custom_target(
antlr3c
${MAKE}
DEPENDS configure-antlr3c
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
Le principal problème est queconfigure-antlr3c
cible est toujours "out of date", de sorte qu'il sera toujours exécutée, même si aucun changement ne s'est produit. En outre, j'ai nécessairement besoin de générer mon cmake makefiles dans un répertoire séparé (pas dans le répertoire racine de mon projet) pour éviter la substitution de la autotools Makefile de la bibliothèque...
Quelqu'un a eu ce problème (bâtiment autotools projets avec cmake) ? Et si oui, quels ont été vos solutions ?
Merci.
EDIT : Solution
Dans la racine CMakeLists.txt:
include(ExternalProject)
ExternalProject_Add(
libantlr3c
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3
CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3/configure --prefix=${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3
PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3
BUILD_COMMAND make
BUILD_IN_SOURCE 1
)
- Vous devez ajouter votre solution à un bloc Réponse; pas dans la question.
Vous devez vous connecter pour publier un commentaire.
Je pense que vous feriez mieux d'utiliser le ExternalProject fonction de cmake. Je suppose que vous avez de votre projet et ont libantrl dans un sous-répertoire?
Si c'est le cas, vous pouvez faire quelque chose comme ceci dans le haut niveau CMakeLists.txt:
La
<INSTALL_DIR>
est élargi à quelque chose comme libantlr-préfixe, donc les choses sont installés dans votre arbre de construction plutôt que dans /usr/local, qui est ce que les autotools ferait sans préfixe.