Это моя первая попытка использования cmake, и я хотел бы получить, если возможно, некоторые отзывы о том, что я сделал, поскольку остаются некоторые проблемы.
В CMakeLists.txt папки библиотеки я создал двацели makefile: configure-antlr3c
и antlr3c
.Первая цель запускает скрипт оболочки конфигурации autotools, вторая запускает исполняемый файл 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 в отдельном каталоге (не в корневом каталоге моего проекта), чтобы избежать переопределения autofols Makefile библиотеки ...
У кого-нибудь была такая проблема (сборка autotoolsпроекты с cmake)?И если да, то каковы были ваши решения?
Спасибо.
РЕДАКТИРОВАТЬ: Решение В корне 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
)