Использование protobuf в CMake в качестве ExternalProject - PullRequest
0 голосов
/ 03 сентября 2018

Изначально у меня была копия protobuf в VCS, с которой я полностью не согласен. Я хотел бы использовать protobuf как внешнюю зависимость от моего проекта.

Для библиотеки требуются только libprotobuf.cmake и libprotobuf-lite.cmake. Эти файлы могут быть включены в пользовательский CMakeLists.txt, например:

cmake_minimum_required(VERSION 2.8.12)

project(protobuf C CXX)
# set protobuf_source_dir
# set protobuf_SHARED_OR_STATIC to "SHARED" or "STATIC"
include_directories(${protobuf_source_dir}/src)

include(${protobuf_source_dir}/cmake/libprotobuf-lite.cmake)
include(${protobuf_source_dir}/cmake/libprotobuf.cmake)

Я слышал о ExternalProject в CMake, но CMake жалуется, что не может найти CMakeLists.txt в этом проекте.

1 Ответ

0 голосов
/ 03 сентября 2018

CMake ExternalProject предполагает, что CMakeLists.txt существует в корневом каталоге. Однако в protobuf версии 3.4 есть несколько примеров и CMakeLists.txt в папке cmake.

.

Пример использования без изменения внешней библиотеки:

set(PROTOBUF_TAR_GZ https://github.com/google/protobuf/archive/v3.4.0.tar.gz)

ExternalProject_Add(
  protobuf-external
  PREFIX protobuf
  URL ${PROTOBUF_TAR_GZ}
  BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf
  CMAKE_CACHE_ARGS
    "-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}"
    "-Dprotobuf_BUILD_TESTS:BOOL=OFF"
    "-Dprotobuf_BUILD_EXAMPLES:BOOL=OFF"
    "-Dprotobuf_WITH_ZLIB:BOOL=OFF"
    "-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}"
    # other project specific parameters
  SOURCE_SUBDIR cmake
  BUILD_ALWAYS 1
  STEP_TARGETS build
  INSTALL_COMMAND ""
)

EXternalProject_Get_Property(protobuf-external source_dir)
include_directories(${source_dir}/src)
link_directories(${CMAKE_CURRENT_BINARY_DIR}/protobuf)

Важной частью является установка SOURCE_SUBDIR в папку cmake.

В любом случае я сделал следующие предположения (отраженные в CMAKE_CACHE_ARGS), но они могут быть изменены и в настоящее время воспринимаются просто как пример конфигурации:

  • Настройка типа сборки в соответствии с проектом. Отладка может быть полезна при проверке унаследованных сообщений. Я бы предпочел Release для внешних библиотек.
  • Я не хочу тестировать protobuf. * ​​1027 *
  • Мне не нужны примеры и сжатые сообщения.
  • При желании разрешить установку компилятора из родительского проекта при кросс-компиляции.
...