1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-nanopb

Клонировать/Скачать
CMakeLists.txt 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.06.2025 07:06 b8e177d
cmake_minimum_required(ВЕРСИЯ 3.14.0)
project(nanopb VERSION 1.0.0 ЯЗЫКИ C)
set(nanopb_VERSION_STRING ${PROJECT_NAME}-${${PROJECT_NAME}_VERSION}-dev)
set(nanopb_SOVERSION 0)
string(REPLACE "nanopb-" "" nanopb_VERSION ${nanopb_VERSION_STRING})
опция(BUILD_SHARED_LIBS "Создание общих библиотек" ВЫКЛ)
опция(BUILD_STATIC_LIBS "Создание статических библиотек" ВКЛ)
опция(nanopb_BUILD_RUNTIME "Создание заголовочных файлов и библиотек, необходимых в режиме выполнения" ВКЛ)
опция(nanopb_BUILD_GENERATOR "Создание плагина protoc для генерации кода" ВКЛ)
опция(nanopb_MSVC_STATIC_RUNTIME "Связывание статических библиотек времени выполнения" ВКЛ)
set(nanopb_PYTHON_INSTDIR_OVERRIDE "" КЭШ ПУТЬ "Замена стандартного пути установки Python указанным путем")
find_program(nanopb_PROTOC_PATH protoc ПУТЬ generator-bin generator НЕ_ЗАДАННЫЙ_ПУТЬ)
find_program(nanopb_PROTOC_PATH protoc)
если(НЕ СУЩЕСТВУЕТ ${nanopb_PROTOC_PATH})
сообщение(ОШИБКА "Компилятор protoc не найден")
конецесли()
если(НЕ ОПРЕДЕЛЕНО CMAKE_DEBUG_POSTFIX)
set(CMAKE_DEBUG_POSTFIX "d")
конецесли()
включить(GNUInstallDirs)
если(MSVC И nanopb_MSVC_STATIC_RUNTIME)
для каждого(flag_var
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
если(${flag_var} ПОДХОДИТ "/MD")
строка(РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ ЗАМЕНИТЬ "/MD" "/MT" ${flag_var} "${${flag_var}}")
конецесли(${flag_var} ПОДХОДИТ "/MD")
конецдля(flag_var)
конецесли()
если(НЕ ОПРЕДЕЛЕНО CMAKE_INSTALL_CMAKEDIR)
set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/nanopb")
конецесли()
# Перевод текстовых описаний
опция(BUILD_SHARED_LIBS "Создание общих библиотек" ВЫКЛ)
опция(BUILD_STATIC_LIBS "Создание статических библиотек" ВКЛ)
опция(nanopb_BUILD_RUNTIME "Создание заголовочных файлов и библиотек, необходимых в режиме выполнения" ВКЛ)
опция(nanopb_BUILD_GENERATOR "Создание плагина protoc для генерации кода" ВКЛ)
опция(nanopb_MSVC_STATIC_RUNTIME "Связывание статических библиотек времени выполнения" ВКЛ)
set(nanopb_PYTHON_INSTDIR_OVERRIDE "" КЭШ ПУТЬ "Замена стандартного пути установки Python указанным путем")
если(НЕ СУЩЕСТВУЕТ ${nanopb_PROTOC_PATH})
сообщение(ОШИБКА "Компилятор protoc не найден")
конецесли()
если(НЕ ОПРЕДЕЛЕНО CMAKE_DEBUG_POSTFIX)
set(CMAKE_DEBUG_POSTFIX "d")
конецесли()
если(MSVC И nanopb_MSVC_STATIC_RUNTIME)
для каждого(flag_var
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
если(${flag_var} ПОДХОДИТ "/MD")
строка(РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ ЗАМЕНИТЬ "/MD" "/MT" ${flag_var} "${${flag_var}}")
конецесли(${flag_var} ПОДХОДИТ "/MD")
конецдля(flag_var)
конецесли()
если(НЕ ОПРЕДЕЛЕНО CMAKE_INSTALL_CMAKEDIR)
set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/nanopb")
конецесли()
# Перевод текстовых описаний
опция(BUILD_SHARED_LIBS "Создание общих библиотек" ВЫКЛ)
опция(BUILD_STATIC_LIBS "Создание статических библиотек" ВКЛ)
опция(nanopb_BUILD_RUNTIME "Создание заголовочных файлов и библиотек, необходимых в режиме выполнения" ВКЛ)
опция(nanopb_BUILD_GENERATOR "Создание плагина protoc для генерации кода" ВКЛ)
опция(nanopb_MSVC_STATIC_RUNTIME "Связывание статических библиотек времени выполнения" ВКЛ)
set(nanopb_PYTHON_INSTDIR_OVERRIDE "" КЭШ ПУТЬ "Замена стандартного пути установки Python указанным путем")
если(НЕ СУЩЕСТВУЕТ ${nanopb_PROTOC_PATH})
сообщение(ОШИБКА "Компилятор protoc не найден")
конецесли()
если(НЕ ОПРЕДЕЛЕНО CMAKE_DEBUG_POSTFIX)
set(CMAKE_DEBUG_POSTFIX "d")
конецесли()
если(MSVC И nanopb_MSVC_STATIC_RUNTIME)
для каждого(flag_var
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
если(${flag_var} ПОДХОДИТ "/MD")
строка(РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ ЗАМЕНИТЬ "/MD" "/MT" ${flag_var} "${${flag_var}}")
конецесли(${flag_var} ПОДХОДИТ "/MD")
конецдля(flag_var)
конецесли()
если(НЕ ОПРЕДЕЛЕНО CMAKE_INSTALL_CMAKEDIR)
set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/nanopb")
конецесли()
# Перевод текстовых описаний
опция(BUILD_SHARED_LIBS "Создание общих библиотек" ВЫКЛ)
опция(BUILD_STATIC_LIBS "Создание статических библиотек" ВКЛ)
опция(nanopb_BUILD_RUNTIME "Создание заголовочных файлов и библиотек, необходимых в режиме выполнения" ВКЛ)
опция(nanopb_BUILD_GENERATOR "Создание плагина protoc для генерации кода" ВКЛ)
опция(nanopb_MSVC_STATIC_RUNTIME "Связывание статических библиотек времени выполнения" ВКЛ)
set(nanopb_PYTHON_INSTDIR_OVERRIDE "" КЭШ ПУТЬ "Замена стандартного пути установки Python указанным путем")
если(НЕ СУЩЕСТВУЕТ ${nanopb_PROTOC_PATH})
сообщение(ОШИБКА "Компилятор protoc не найден")
конецесли()
если(НЕ ОПРЕДЕЛЕНО CMAKE_DEBUG_POSTFIX)
set(CMAKE_DEBUG_POSTFIX "d")
конецесли()
если(MSVC И nanopb_MSVC_STATIC_RUNTIME)
для каждого(flag_var
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
если(${flag_var} ПОДХОДИТ "/MD")
строка(РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ ЗАМЕНИТЬ "/MD" "/MT" ${flag_var} "${${flag_var}}")
конецесли(${flag_var} ПОДХОДИТ "/MD")
конецдля(flag_var)
конецесли()
если(НЕ ОПРЕДЕЛЕНО CMAKE_INSTALL_CMAKEDIR)
set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/nanopb")
конецесли()
# Перевод текстовых описаний
опция(BUILD_SHARED_LIBS "Создание общих библиотек" ВЫКЛ)
опция(BUILD_STATIC_LIBS "Создание статических библиотек" ВКЛ)
опция(nanopb_BUILD_RUNTIME "Создание заголовочных файлов и библиотек, необходимых в режиме выполнения" ВКЛ)
опция(nanopb_BUILD_GENERATOR "Создание плагина protoc для генерации кода" ВКЛ)
опция(nanopb_MSVC_STATIC_RUNTIME "Связывание статических библиотек времени выполнения" ВКЛ)
set(nanopb_PYTHON_INSTDIR_OVERRIDE "" КЭШ ПУТЬ "Замена стандартного пути установки Python указанным путем")
если(НЕ СУЩЕСТВУЕТ ${nanopb_PROTOC_PATH})
сообщение(ОШИБКА "Компилятор protoc не найден")
конецесли()
если(НЕ ОПРЕДЕЛЕНО CMAKE_DEBUG_POSTFIX)
set(CMAKE_DEBUG_POSTFIX "d")
конецесли()
если(MSVC И nanopb_MSVC_STATIC_RUNTIME)
для каждого(flag_var
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
если(${flag_var} ПОДХОДИТ "/MD")
строка(РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ ЗАМЕНИТЬ "/MD" "/MT" ${flag_var} "${${flag_var}}")
конецесли(${flag_var} ПОДХОДИТ "/MD")
конецдля(flag_var)
конецесли()
если(НЕ ОПРЕДЕЛЕНО CMAKE_INSTALL_CMAKEDIR)
set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/nanopb")
конецесли()
# Перевод текстовых описаний
опция(BUILD_SHARED_LIBS "Создание общих библиотек" ВЫКЛ)
опция(BUILD_STATIC_LIBS "Создание статических библиотек" ВКЛ)
опция(nanop# Определение пути установки модуля Python
если (НЕ nanopb_PYTHON_INSTDIR_OVERRIDE)
find_package(Python ТРЕБУЕТСЯ КОМПОНЕНТЫ Интерпретатор)
file(TO_CMAKE_PATH "${Python_SITELIB}" PYTHON_INSTDIR)
иначе()
set(PYTHON_INSTDIR ${nanopb_PYTHON_INSTDIR_OVERRIDE})
конецесли()
сообщение(СТАТУС "Путь установки Python: ${PYTHON_INSTDIR}")# Упаковка генератора nanopb как модуля Python 'nanopb'
если(nanopb_BUILD_GENERATOR)
# Копирование файлов кода Python, связанных с генератором
add_custom_target(nanopb_generator ВСЕ
COMMAND ${CMAKE_COMMAND} -E make_directory
${PROJECT_BINARY_DIR}/nanopb/generator/proto
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${PROJECT_SOURCE_DIR}/generator/proto/_utils.py
${PROJECT_SOURCE_DIR}/generator/proto/__init__.py
${PROJECT_SOURCE_DIR}/generator/proto/nanopb.proto
${PROJECT_BINARY_DIR}/nanopb/generator/proto
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${PROJECT_SOURCE_DIR}/generator/nanopb_generator.py
${PROJECT_SOURCE_DIR}/generator/__init__.py
${PROJECT_BINARY_DIR}/nanopb/generator
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${PROJECT_SOURCE_DIR}/generator/__init__.py
${PROJECT_BINARY_DIR}/nanopb
COMMAND ${nanopb_PROTOC_PATH}
--python_out=${PROJECT_BINARY_DIR}/nanopb/generator/proto
-I${PROJECT_SOURCE_DIR}/generator/proto
${PROJECT_SOURCE_DIR}/generator/proto/nanopb.proto
)
# Установка файлов Python-модуля
install(
DIRECTORY ${PROJECT_BINARY_DIR}/nanopb
DESTINATION ${PYTHON_INSTDIR}
FILES_MATCHING
PATTERN *.py
PATTERN *.proto
PATTERN __pycache__ EXCLUDE
)
# Генерация обёртки скрипта, который вызывает модуль nanopb.generator Python при запуске
configure_file(
extra/script_wrappers/nanopb_generator.py.in
${PROJECT_BINARY_DIR}/nanopb_generator.py
)
install(
PROGRAMS ${PROJECT_BINARY_DIR}/nanopb_generator.py
DESTINATION ${CMAKE_INSTALL_BINDIR}
) # Установка обёрток скриптов shell/bat для запуска nanopb_generator.py.
# protoc-gen-nanopb автоматически используется протоком при использовании опции --nanopb_out=
if(WIN32)
# Включение полного пути к исполняемому файлу Python в Windows .bat скриптах, так как он может отсутствовать в PATH
file(READ generator/protoc-gen-nanopb.bat FILE_CONTENTS)
string(REPLACE "python" ${Python_EXECUTABLE} FILE_CONTENTS "${FILE_CONTENTS}")
file(WRITE ${PROJECT_BINARY_DIR}/protoc-gen-nanopb.bat "${FILE_CONTENTS}")```cmake
file(READ generator/nanopb_generator.bat FILE_CONTENTS)
string(REPLACE "python" ${Python_EXECUTABLE} FILE_CONTENTS "${FILE_CONTENTS}")
file(WRITE ${PROJECT_BINARY_DIR}/nanopb_generator.bat "${FILE_CONTENTS}")
install(
PROGRAMS
${PROJECT_BINARY_DIR}/protoc-gen-nanopb.bat
${PROJECT_BINARY_DIR}/nanopb_generator.bat
DESTINATION ${CMAKE_INSTALL_BINDIR}
)
else()
# Скрипты для Linux/Mac в настоящее время используют python3 из PATH
install(
PROGRAMS
generator/protoc-gen-nanopb
generator/nanopb_generator
DESTINATION ${CMAKE_INSTALL_BINDIR}
)
endif()
endif()
if(нанопб_BUILD_RUNTIME)
if(BUILD_SHARED_LIBS)
add_library(protobuf-nanopb SHARED
pb.h
pb_common.h
pb_common.c
pb_encode.h
pb_encode.c
pb_decode.h
pb_decode.c)
set_target_properties(protobuf-nanopb PROPERTIES
SOVERSION ${нанопб_SOVERSION})
install(TARGETS protobuf-nanopb EXPORT nanopb-target
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
target_include_directories(protobuf-nanopb INTERFACE
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/nanopb>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
endif()
if(BUILD_STATIC_LIBS)
add_library(protobuf-nanopb-static STATIC
pb.h
pb_common.h
pb_common.c
pb_encode.h
pb_encode.c
pb_decode.h
pb_decode.c)
set_target_properties(protobuf-nanopb-static PROPERTIES
OUTPUT_NAME protobuf-nanopb)
install(TARGETS protobuf-nanopb-static EXPORT nanopb-target
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
target_include_directories(protobuf-nanopb-static INTERFACE
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/nanopb>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
)
endif()
endif()
``` настроить_файл(extra/nanopb-config-version.cmake.in
nanopb-config-version.cmake @ONLY)
установить(ИМПОРТ nanopb-цели
DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
НАСЛЕДСТВО nanopb::)
установить(ФАЙЛЫ extra/nanopb-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/nanopb-config-version.cmake
DESTINATION ${CMAKE_INSTALL_CMAKEDIR})
установить(ФАЙЛЫ pb.h pb_common.h pb_encode.h pb_decode.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/nanopb)
конец_если()
конец_если()

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-nanopb.git
git@api.gitlife.ru:oschina-mirror/mirrors-nanopb.git
oschina-mirror
mirrors-nanopb
mirrors-nanopb
master