CMake ExternalProject_Add () - Сборка с настроенным CMakeLists.txt - PullRequest
12 голосов
/ 25 сентября 2011

Я собираю 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 работал, в SOURCE_DIR должен быть файл CMakeLists.txt.У меня есть этот 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 Ответ

16 голосов
/ 26 сентября 2011

Я понял это сам.Сейчас я использую это как 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}.Отлично!

...