#cmake #cmake-modules
#cmake #cmake-модули
Вопрос:
Я пытаюсь использовать следующий подход для встраивания плоских буферов в мой проект:
ExternalProject_Add(
googleflatbuf
GIT_REPOSITORY "https://github.com/google/flatbuffers"
GIT_TAG "v1.12.0"
PREFIX "${CMAKE_BINARY_DIR}/googleflatbuf"
INSTALL_DIR "${CMAKE_BINARY_DIR}"
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}"
)
flatbuf построен, как и ожидалось, поэтому здесь нет проблем.
Затем я попытаюсь использовать его для реальной генерации кода подобным образом:
file(GLOB PROTOCOL_SRC "${CMAKE_CURRENT_SOURCE_DIR}/*.fbs")
string (REPLACE ";" " " PROTOCOL_SRC_STR "${PROTOCOL_SRC}")
add_custom_target(
protocol_src_gen
COMMAND "${FLATC} --cpp -o ${CMAKE_CURRENT_BINARY_DIR} ${PROTOCOL_SRC_STR}"
DEPENDS googleflatbuf
SOURCES ${PROTOCOL_SRC}
)
Где FLATC
"${CMAKE_BINARY_DIR}/bin/flatc"
Я уверен, что это был бы не лучший способ получить плоский путь, даже если бы он работал. На самом деле я получаю FLATC == ../bin/flatc
.
Поэтому у меня есть два вопроса:
- Как мне получить абсолютный путь
CMAKE_BINARY_DIR
? - Как правильно вызывать исполняемые файлы, созданные ExternalProject?
Комментарии:
1. Да, этот способ должен работать (при условии, что вы удалите двойные кавычки вокруг параметров после
COMMAND
). Вы пробовали это? «Как мне получить абсолютный путьCMAKE_BINARY_DIR
? —CMAKE_BINARY_DIR
это уже абсолютный путь. Не уверен, в чем проблема.2. Да, это работает. Помогло удаление кавычек. Я все еще вижу, что flatc вызывается как ../bin/flatc, но это работает. Не уверен, что здесь происходит, но может быть, что строка в кавычках обрабатывается как путь к исполняемому файлу целиком. Что было бы довольно странно. @Tsyvarev, напишите ответ, пожалуйста, чтобы я мог его принять.