This library contains code that extends and simplifies different operations
for C language based programs.
Rev. | Zeit | Autor | Nachricht |
---|---|---|---|
df4e3adb77d0 | 2023-03-10 08:03:52 | Sergey Gusarov | tip test_enum_factory: fixed gcc+clang warning |
470e86c1363e | 2023-03-10 07:20:01 | Sergey Gusarov | "int roundf*()" functions renamed to iroundf*() because o... |
34e2659008ad | 2023-02-26 07:22:14 | Sergey Gusarov | Fixed compilation of verson_info_app.h.template |
36a7a4e8ba2c | 2023-02-26 06:35:51 | Sergey Gusarov | Fixed embedding of version info into dll |
b7842628cedb | 2023-02-26 05:45:22 | Sergey Gusarov | Fixed misprint |
fe25dfe092b6 | 2023-02-26 05:37:09 | Sergey Gusarov | Added ignored file |
68e6508562a4 | 2023-02-26 05:22:32 | Sergey Gusarov | Attempt to make file_propery.rc.template portable across ... |
29674bbe888d | 2023-02-26 05:13:13 | Sergey Gusarov | Adoptation to pyrepo change |
5b0028253cac | 2023-02-26 04:23:14 | Sergey Gusarov | file_propert_*.rc now are templates |
f55e6b4fe7d8 | 2023-02-26 03:57:05 | Sergey Gusarov | Added file_property_app.rc |
Name | Rev. | Zeit | Autor |
---|---|---|---|
0.1 | 924b5bcd9198 | 2017-03-26 08:29:24 | s.gusarov |
0.2 | 0969a52f3130 | 2022-08-31 21:43:25 | Sergey Gusarov |
0.3 | 9b419c962586 | 2022-10-07 11:09:14 | Sergey Gusarov |
tip | df4e3adb77d0 | 2023-03-10 08:03:52 | Sergey Gusarov |
Name | Rev. | Zeit | Autor | Nachricht |
---|---|---|---|---|
default | df4e3adb77d0 | 2023-03-10 08:03:52 | Sergey Gusarov | test_enum_factory: fixed gc... |
Содержит библиотечный код, расширяющий и упрощающий различные операции в программах на языке C. То есть содержит программные инструменты, которые можно использовать в любой развитой программе на языке C. Весь код по возможности совместим со стандартамим C99, C++98 и C++2011, поэтому легко может также использоваться в C++ программах (с соответствующими оптимизациями). Очень важно не уходить далеко от C99. По состоянию на 2015-ый год C11 не везде хорошо поддерживается. Кроме этого, есть интересные стандарты типа OpenCL, совместимые с C99. Библиотека может использоваться при разработке под различные операционные системы и без таковых, с любой архитектурой и разрядностью процессора. Основная цель существования библиотеки - организация удобного слоя между операционными системами (которые, как правило, имеют C-интерфейс), компиляторами, поддерживающими различные расширения и прикладными программами на C/C++.
Макросы и определения экспортируемые библиотекой имеют префикс CT. Внутренние определения (a также типы, функции) имеют постфикс __ (например CT_B8__). Все переменные, константы и функции для C++ программ располагаются в пространстве имён ctools.
Подкаталоги интерфейса (include/ctools):
Все эти проекты могут служить источником каких-то идей, но скорее всего они будут лицензионно несовместимы. Библиотека предполагается минималистичной и поэтому не тянет много зависимостей. Идеи для predef можно подчерпнуть в boost/predef, predef и Qt/qtbase . Все эти проекты можно было бы сделать подпроектами, но:
Любые, на которых работают компиляторы C99, C++98 и выше, с любой разрядностью процессора и любым порядком байт В качестве исключения допускаются некоторые не совсем совместимые C99 компиляторы типа MS VC++. Хотя тестирования преимущественно происходит на платформах:
Библиотека должна работать как на ограниченных в ресурсах платформах (микроконтроллерах без ОС) так и под управлением современных ОС. Из-за того, что все возможности библиотеки на конкретной платформе могут быть не доступны (например, реализации мьютексов или функции msleep() на базе системных вызовов) библиотека не должна терять работоспособность. Предполагается, что можно использовать любые определения из интерфейса библиотеки в любых комбинациях. Для этого они максимально распределяются по отдельным модулям, чтобы уменьшить взаимные зависимости. Проект никогда не тестировался на совместимость с gcc версии меньше чем 4.2.4 . Совместимость на ограниченных платформах должна отслеживаться разработчиком.
Все скрипты проекта написаны на языке Python (Рекомендуется Python 3.3 и выше). Проект можно собирать с использованием системы сборки CMake. В этом случае потребуется CMake 2.8.3 и выше. Обе эти зависимости не являются обязательными. В проекте используются системы сборки git и mercurial.
В системе также должны быть установлены все зависимости pyrepo, cmake_tools и зависимости из каталога tests.
Существует 4 варианта использования:
Сборка не осуществляется. Сборкой должен заниматься тот проект, который использует эту библиотеку. Для этого он должен указать пути для поиска заголовочных файлов include и build_info/include. Линковать все модули из src и подкаталогов src (если таковые нужны). Может потребоваться определение препроцессорных идентификаторов для выбора режима работы различных подсистем. По мере развития библиотеки этот вариант сборки нужно сопровождать. Вся актуальная информация может браться из файлов CMakeLists.txt проектов libctools и libcpptools. Этот вариант сборки можно рекомендовать только в тех случаях, когда следующие варианты не удаётся осуществить по каким-то причинам;
Сборка осуществляется с использованием CMakeLists.txt . При этом формируется иерархия проектов с описанием сборки. Вышестоящий проект должен включать libctools посредством директивы:
add_subdirectory(libctools)
Может потребоваться указание других переменных CMake и переменных окружения. Пример реализации такой сборки можно посмотреть в корне libcpptools;
Сборка осуществляется с использованием единственного CMakeLists.txt . Большинство возможностей библиотеки выключено при сборке. Этот вариант может быть удобен для работы с исходниками библиотеки в различных IDE;
Сборка осуществляется с использованием скриптов cmake_*.py . Собранная библиотека в релизной или отладочной конфигурации помещается в определённый подкаталог build.
Ниже перечислены некоторые идентификаторы, которые могут быть заданы при сборке под микроконтроллерные платформы:
В некоторых случаях не обойтись без выполнения каких-либо действий сразу после загрузки библиотеки, чтобы все её подсистемы работали корректно. Если внешний проект только использует какие-либо простые макросы, то инициализация не нужна. В противном случае рекомендуется вызывать функции из файла ctools.h:
Смотри подкаталог tests.