web-dev-qa-db-fra.com

Comment ne pas faire l'étape d'installation lors de la construction d'un projet externe avec cmake

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?

13
Vyacheslav

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)
8
Paweł Bylica

Vous l'avez presque eu: au lieu de INSTALL_COMMAND "", mettez quelque chose comme

    INSTALL_COMMAND cmake -E echo "Skipping install step."
4
James Hirschorn

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.

0
ceztko