1 votes

Configurer le processus de construction dans le ExternalProject_Add de CMake

J'ai un projet C++ (Superproject) qui dépend d'un autre projet sur lequel je n'ai aucun contrôle (Subproject). Pour pouvoir construire mon projet, je dois d'abord construire le sous-projet, puis le super-projet, qui se lie aux bibliothèques construites par le sous-projet.

Les deux projets utilisent CMake pour configurer les Makefiles correspondants. Manuellement, je devrais télécharger le sous-projet dans un sous-dossier du super-projet ( externals/Subproject ) et ensuite cd en externals/Subproject/build et exécuter cmake .. et ensuite make target1 .

J'aimerais automatiser ce processus à partir du fichier CMakeLists de Superproject en utilisant la fonctionnalité ExternalProject_Add. Jusqu'à présent, j'ai quelque chose comme

ExternalProject_Add(Subproject
    DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals"
    GIT_REPOSITORY "git@path/to/repo/Subproject.git"
    GIT_TAG "master"
    SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build"
)

qui télécharge et construit correctement le all objectif du sous-projet. Mais lorsque j'essaie de le modifier pour qu'il ne construise que le sous-projet target1 du sous-projet avec

ExternalProject_Add(Subproject
    DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals"
    GIT_REPOSITORY "git@path/to/repo/Subproject.git"
    GIT_TAG "master"
    SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build"
    BUILD_COMMAND "${MAKE} target1"
)

il ne parvient pas à exécuter le make se plaignant que /bin/sh ne sait pas ce que target1 est.

Comment puis-je modifier la cible de compilation de ExternalProject_Add pour répondre à mes besoins ?

1voto

Jesús Ros Points 121

Finalement, j'ai réussi à résoudre le problème en supprimant les guillemets dans le fichier BUILD_COMMAND en remplaçant les accolades par des parenthèses autour de l'instruction MAKE puis de désactiver la directive INSTALL_COMMAND :

ExternalProject_Add(Subproject
    DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals"
    GIT_REPOSITORY "git@path/to/repo/Subproject.git"
    GIT_TAG "master"
    SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build"
    BUILD_COMMAND $(MAKE) target1
    INSTALL_COMMAND "")

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X