Изначально у меня была копия 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)
Я слышал о CMake ExternalProject, но CMake жалуется, что не может найти CMakeLists.txt в этом проекте.





CMake ВнешнийПроект предполагает, что 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), но они могут быть изменены и в настоящее время воспринимаются только как пример конфигурации:
не забудьте также настроить цепочку инструментов в соответствии с вашим проектом (если вы выполняете кросс-компиляцию)