Je construis un projet de dépendance avec la commande cmake ExternalProject_Add:
include(ExternalProject)
...
set(COMMON_BASE_PROJECT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../CommonBase)
ExternalProject_Add(CommonBaseProject
SOURCE_DIR ${COMMON_BASE_PROJECT_DIR}
BINARY_DIR ${COMMON_BASE_PROJECT_DIR}/build
INSTALL_COMMMAND ""
)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${COMMON_BASE_PROJECT_DIR}/include)
add_library(
${LIBRARY_NAME}
SHARED
${SRC_FILES}
${INCLUDE_FILES}
)
target_link_libraries (Bios ${COMMON_BASE_PROJECT_DIR}/build/libCommonBase.dll)
add_dependencies(Bios CommonBaseProject)
mais j'obtiens une erreur:
[100%] Linking CXX shared library libCommonBase.dll
[100%] Built target CommonBase
[ 50%] Performing install step for 'CommonBaseProject'
make[3]: *** No rule to make target 'install'. Stop.
Je n'ai pas besoin de faire l'étape d'installation, alors ma question est: comment le désactiver?
Vous pouvez générer une cible pour l'étape de construction avec STEP_TARGETS build
et ajouter une dépendance à cette cible particulière. Les cibles d’étape sont nommées <external-project-name>-<step-name>
. Dans ce cas, la cible représentant l’étape de construction sera nommée CommonBaseProject-build
.
Vous voudrez probablement aussi exclure CommonBaseProject de la cible "tout" avec EXCLUDE_FROM_ALL TRUE
.
ExternalProject_Add(CommonBaseProject
SOURCE_DIR ${COMMON_BASE_PROJECT_DIR}
BINARY_DIR ${COMMON_BASE_PROJECT_DIR}/build
STEP_TARGETS build
EXCLUDE_FROM_ALL TRUE
)
add_dependencies(Bios CommonBaseProject-build)
Vous l'avez presque eu: au lieu de INSTALL_COMMAND ""
, mettez quelque chose comme
INSTALL_COMMAND cmake -E echo "Skipping install step."
Non pertinent pour votre question, à laquelle il a déjà été répondu, mais dans mon cas, j'avais la directive ExternalProject_Add
suivante:
ExternalProject_Add(external_project
# [...]
# Override build/install command
BUILD_COMMAND ""
INSTALL_COMMAND
"${CMAKE_COMMAND}"
--build .
--target INSTALL # Wrong casing for "install" target
--config ${CMAKE_BUILD_TYPE}
)
Dans ce cas, cmake se ferme avec une erreur très similaire (*** No rule to make target 'INSTALL'
), mais dans ce cas, c'est le projet externe qui recherche l'erreur INSTALL
majuscule__ incorrecte: la casse correcte est plutôt install
. Apparemment, cela fonctionnait sous Windows avec MSVC mais échouait sous les systèmes d'exploitation Unix.