Это моя первая попытка с 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 в отдельном каталоге (не в корневом каталоге моего проекта), чтобы избежать переопределения 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
)