CMake ExternalProject_Add() - создание с помощью настраиваемого CMakeLists.txt

Я создаю lua как внешний проект, и я хочу использовать свой собственный CMakeLists.txt вместо связанного Makefile. Это то, что у меня есть в главном файле CMakeLists.txt:


include(ExternalProject)
set(lua_RELEASE 5.1.4)
ExternalProject_Add(
    lua-${lua_RELEASE}
    URL http://www.lua.org/ftp/lua-${lua_RELEASE}.tar.gz
    DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/download/lua-${lua_RELEASE}
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/lua/lua-${lua_RELEASE}
    BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/build/lua-${lua_RELEASE}
    UPDATE_COMMAND ""
    PATCH_COMMAND ""
    INSTALL_COMMAND ""
)

Для шага BUILD для работы должен быть CMakeLists.txt в SOURCE_DIR. У меня есть этот CMakeLists.txt в SOURCE_DIR на данный момент:


cmake_minimum_required(VERSION 2.8)

project(lua)

set(lua_library
  lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c
  lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c
  ltable.c ltm.c lundump.c lvm.c lzio.c
  lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c
  ltablib.c lstrlib.c loadlib.c linit.c)

foreach(s ${lua_library})
    set(lua_LIBRARY ${lua_LIBRARY} src/${s})
endforeach()

add_definitions(-DLUA_ANSI=1)
add_library(lua STATIC ${lua_LIBRARY})

Это работает, но я не доволен тем, что исходные файлы lua загромождают мою версию CMakeLists.txt.

Есть ли способ указать пользовательский CMakeLists.txt для этапа сборки, который не находится в SOURCE_DIR?

Ответ 1

Я понял это сам. Теперь я использую это как PATCH_COMMAND:

    PATCH_COMMAND ${CMAKE_COMMAND} -E copy
      "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/lua/CMakeLists.txt" <SOURCE_DIR>/CMakeLists.txt

Это позволяет мне иметь свой пользовательский CMakeLists.txt в thirdparty/lua, а восходящий пакет загружается в thirdparty/lua/lua-${lua_RELEASE}. Отлично!