Как заменить расширение для списка имен файлов cmake - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь собрать библиотеку c ++ из некоторых protobuf определений, используя cmake.Я добавил пользовательскую команду для компиляции proto в c ++, но у меня есть некоторые проблемы с выходной частью.Мне нужно указать, какие ожидаемые выходные файлы после protoc делает свою работу.Для этого я хотел бы заменить в моем PROTO_SOURCE файловом глобусе расширение proto на .pb.cc и .pb.h

Мне в принципе нужно что-то вроде this , но для cmake.

Я собираю эту команду вручную, потому что у меня нет поддержки protobuf cmake.

project(messages)

set(PROTO_PATH "${CMAKE_CURRENT_SOURCE_DIR}/proto_definitions")
file(GLOB PROTO_FILES "${PROTO_PATH}/*.proto")
#set(PROTO_SOURCES ???) # This needs to contain '*.pb.cc' and '*.pb.h'

add_custom_command(COMMAND protoc --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/compiled_proto ${PROTO_FILES}
               WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
               DEPENDS ${PROTO_FILES}
               OUTPUT ${PROTO_SOURCES})

add_library(${PROJECT_NAME} STATIC ${PROTO_SOURCES})

1 Ответ

1 голос
/ 14 июня 2019

Использовать строку (ЗАМЕНА REGEX) Функция:

# Replace .proto -> .pb.cc
string(REGEX REPLACE "[.]proto$" ".pb.cc" OUTPUT_SOURCES ${PROTO_FILES})
# Replace .proto -> .pb.h
string(REGEX REPLACE "[.]proto$" ".pb.h" OUTPUT_HEADERS ${PROTO_FILES})

add_custom_command(COMMAND protoc <...>
   OUTPUT ${OUTPUT_SOURCES} ${OUTPUT_HEADERS})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...