Подтвердить что ты не робот

Создание библиотеки с использованием autotools от cmake

Это моя первая попытка с cmake, и я хотел бы иметь, если возможно, некоторые отзывы о том, что я сделал, поскольку некоторые проблемы остаются.

В CMakeLists.txt из папки библиотеки я создал две цели makefile: configure-antlr3c и antlr3c. Первая цель запускает оболочку конфигурации autotools script, вторая запускает исполняемый файл make для сборки библиотеки:

# 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}
)

Основная проблема заключается в том, что цель configure-antlr3c всегда "устарела", поэтому она всегда будет выполняться, даже если никаких изменений не произошло. Кроме того, мне обязательно нужно сгенерировать мои make файлы cmake в отдельном каталоге (а не в корневом каталоге моего проекта), чтобы избежать переопределения файла Makefile из autotools...

У кого-нибудь была эта проблема (создание проектов autotools с cmake)? И если да, то каковы были ваши решения?

Спасибо.

EDIT: решение В корне 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
)
4b9b3361

Ответ 1

Я думаю, что вам лучше использовать функцию ExternalProject cmake. Я предполагаю, что у вас есть проект и есть libantrl в подкаталоге?

project
      +- libantlr
      +- mysrc
  ---- etc ----

Если это так, вы можете сделать что-то подобное на верхнем уровне CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
project(test)
include(ExternalProject)
ExternalProject_Add(libantlr
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libantlr
    CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/libantlr/configure --prefix=<INSTALL_DIR>
    BUILD_COMMAND ${MAKE})

<INSTALL_DIR> расширяется до чего-то вроде libantlr-префикса, поэтому вещи устанавливаются в дереве сборки, а не в /usr/local, что будет без аутрич-кода без префикса.