cmake: изменение ПРЕФИКСА в EXTERNALPROJECT_ADD в зависимости от операционной системы

#linux #macos #cmake

#linux #macos #cmake

Вопрос:

Мне нужно изменить ПРЕФИКС cmake в следующем коде в зависимости от операционной системы.

Он попробовал это так:

 INCLUDE(ExternalProject)

EXTERNALPROJECT_ADD(
    libconfig
    URL ${CMAKE_CURRENT_SOURCE_DIR}/libconfig-1.4.8.tar.gz
    IF(APPLE)
        #Mac detected
        PREFIX libconfig/libconfig-1.4.8
    ENDIF(APPLE)
    IF(UNIX)
         PREFIX libconfig
    ENDIF(UNIX)

    CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --disable-examples
    # We patch in order to avoid building the tests.
    # Otherwise compilation will fail due to relative paths used in libconfig.
    PATCH_COMMAND patch < ${CMAKE_CURRENT_SOURCE_DIR}/libconfig.patch
    BUILD_COMMAND make
    INSTALL_COMMAND make install
)
  

Комментарии:

1. Похоже, это вопрос и ответ одновременно. Вы могли бы ответить на свой собственный вопрос здесь и принять его, если не осталось вопросов… Если у вас все еще есть вопрос, пожалуйста, перефразируйте его, потому что, похоже, здесь нет ничего без ответа. 🙂

2. Спасибо за похвалу, теперь я добавил свой ответ на свою проблему.

Ответ №1:

Я обнаружил проблемы:

Во-первых, проверка IF (UNIX) также верна для операционных систем Mac OS X.

Во-вторых, каким-то образом ПРЕФИКС не может быть изменен. Поэтому обходным путем является использование переменной.

Теперь этот код работает:

 IF(UNIX)
    SET(LIBCONFIG_PREFIX libconfig) 
ENDIF(UNIX)
IF(APPLE)
    SET(LIBCONFIG_PREFIX libconfig/libconfig-1.4.8)    
ENDIF(APPLE)


INCLUDE(ExternalProject)

EXTERNALPROJECT_ADD(
    libconfig
    URL ${CMAKE_CURRENT_SOURCE_DIR}/libconfig-1.4.8.tar.gz

    PREFIX ${LIBCONFIG_PREFIX}

    CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --disable-examples
    # We patch in order to avoid building the tests.
    # Otherwise compilation will fail due to relative paths used in libconfig.
    PATCH_COMMAND patch < ${CMAKE_CURRENT_SOURCE_DIR}/libconfig.patch
    BUILD_COMMAND make
    INSTALL_COMMAND make install
)