Страницы

Поиск по вопросам

понедельник, 15 апреля 2019 г.

Как прилинковать нестандартную версию protobuf используя cmake

Есть проект под arm который компилируется и собирается на х86ой машине (кросскомпиляция). Есть версия библиотеки protobuf собранная под arm по этой инструкции. В cmake файле я пытаюсь явно указать местоположение собранной под arm библиотеки через переменную Protobuf_SRC_ROOT_FOLDER но похоже что cmake эта переменная вообще побоку. Что мне сделать что бы find_package(Protobuf REQUIRED) нашёл ту версию protobuf которая мне нужна?
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -pthread ") #-lboost_system project(proto_test)
# Подключаем протобуф set (Protobuf_SRC_ROOT_FOLDER "/home/mrfieldy/prot_build/protobuf-3.5.1-arm/src") #set (Protobuf_USE_STATIC_LIBS ON) find_package(Protobuf REQUIRED) include_directories(${PROTOBUF_INCLUDE_DIRS}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS test.proto) add_executable(${PROJECT_NAME} test.pb.cc ${PROTO_SRCS} ${PROTO_HDRS} "main.cpp") target_link_libraries(${PROJECT_NAME} ${PROTOBUF_LIBRARIES})

Ответ:
В общем, как посоветовали ниже, я выбрал путь сначала выполнить find_package, а потом с помошью set переопределить пути. Долго искал на какие пути надо переопределить. Вот рабочий вариант.
cmake_minimum_required(VERSION 2.8) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -pthread ") project(proto_test) # Подключаем протобуф find_package(Protobuf REQUIRED) set (PROTOBUF_INCLUDE_DIRS "/home/mrfieldy/prot_build/protobuf-3.6.0-arm/src/") set (PROTOBUF_LIBRARIES "/home/mrfieldy/prot_build/protobuf-3.6.0-arm/src/.libs/libprotobuf.so") include_directories(${PROTOBUF_INCLUDE_DIRS}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) #protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS test.proto) add_executable(${PROJECT_NAME} test.pb.cc ${PROTO_SRCS} ${PROTO_HDRS} "main.cpp") target_link_libraries(${PROJECT_NAME} ${PROTOBUF_LIBRARIES})


Ответ

Поискал по переменной Protobuf_SRC_ROOT_FOLDER и нашел вот что:
FindProtobuf
К сожалению мой английский sehr schlecht, но, насколько я понял у вас версия cmake слишком низкая (документация там начинается с 3.02), а сама переменная касается лишь определенного случая, касающегося Visual Studio и, что-то мне подсказывает, это не то, что вы используете.
Посоветую написать Find-файл самому - это довольно просто

Комментариев нет:

Отправить комментарий