Include config h windows

Содержание
  1. Корректная установка config.h для разделяемой библиотеки с помощью автоинструментов
  2. Решение
  3. Другие решения
  4. Include config h windows
  5. About
  6. unixforum.org
  7. Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?
  8. Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?
  9. Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?
  10. Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?
  11. Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?
  12. Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?
  13. Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?
  14. Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?
  15. Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?
  16. Include config h windows
  17. About

Корректная установка config.h для разделяемой библиотеки с помощью автоинструментов

Я конвертирую программу на C ++, которая использует систему сборки autotools для использования совместно используемой библиотеки, представляя введение в libtool. Большая часть функциональности программы размещается в разделяемой библиотеке, которая загружается основной программой, чтобы в будущем к общему коду могли обращаться другие программы.

Во всех источниках программы и библиотеки генерируется автозаголовок config.h используется с обычным макросом:

В configure.ac я использую макрос для его генерации:

У меня вопрос, нужно ли устанавливать config.h чтобы другие могли использовать мою библиотеку, и если да, то как это сделать, и следует ли ее переименовать, чтобы избежать конфликтов и т. д.?

Больше всего информации я нашел здесь:

Но это вряд ли официальный источник.

Решение

Вам нужно будет установить config.h если это влияет на интерфейс. В практическом плане, если #define требуется заголовок (и), а не только .cc блоки реализации / компиляции.

Если config.h проблема, вы можете указать другое имя в AC_CONFIG_HEADERS макро. например., AC_CONFIG_HEADERS([foo_config.h]) ,

Самый простой способ установить заголовок, предполагая Automake , это с:

на высшем уровне Makefile.am , nodist Приставка сообщает AutoMake, что foo_config.h генерируется, а не распространяется с пакетом.

Если не используете automake, установите foo_config.h в $includedir , $exec_prefix/include возможно, более правильный расположение сгенерированного заголовка, но на практике прежнее расположение хорошо.

Я избегаю использования config.h , передав соответствующие определения в CPPFLAGS или же foo_CPPFLAGS вместе с AC_SUBST в Makefile.am для исходных сборок, или AC_SUBST в foo.h.in генерировать заголовки во время настройки. Много config.h это тестовый шум. Это требует больше инфраструктуры, но это то, что я предпочитаю. Я не рекомендовал бы такой подход, если вы не знакомы с автоинструментами.

Другие решения

Никогда Когда-либо установить автозаголовок config.h ,

Последнее, что нужно пользователям вашей библиотеки — это вмешательство макросов, вытекающих из вашего config.h , Ваша библиотека может иметь HAVE_FOOBAR , но мое программное обеспечение может быть скомпилировано таким образом, чтобы Foobar отключен, так что HAVE_FOOBAR сломает мою компиляцию.

Макрос AX_PREFIX_CONFIG из архива это обходной путь, где все становится с префиксом.

Лучшим подходом является создание файла шаблона (например, blargconfig.h.in ) с такими строками:

А потом AC_SUBST() эти переменные в configure.ac :

Читайте также:  Windows phone lumia 1020

Затем перечислите его как выходной файл:

.h файл должен быть указан с nodist_include_HEADERS ; .h.in файл будет автоматически распространяться, потому что он указан в AC_CONFIG_FILES ,

Назначение для таких файлов обычно $libdir/packagename/include , Увидеть GLib например , хотя они генерируют glibconfig.h без шаблона (написав весь встроенный код создания в configure.ac , как автобук предлагает ). Я считаю этот подход менее ремонтопригодным, чем использование AC_SUBST , но он более гибкий.

Конечно, чтобы помочь компилятору найти зависящий от платформы заголовок, вы, вероятно, также захотите написать скрипт pkgconfig, как это делает GLib.

Include config h windows

Config.h is a single-header library written in C for parsing configuration files .

Parsing configuration files is common task for all kinds of applications. This library parses human-readable configuration files for your existing or future C applications. Using Config.h in your application is easy. Just add Config.h to your project directory and include it.

Config.h is licensed under the ISC license

  • Single-header library for easy integration into existing projects
  • Human-readable configuration file format
  • Support of different variable types: int , double , string , bool , int[8, 16, 32, 64] , and uint[8, 16, 32, 64]
  • Simple interface with only one public function: Config_load
  • Support of function callbacks for advanced configuration control
  • Liberal license for free and commercial software

An example with all data types and a callback can be found in example.c.

A few preprocessor definitions can be set to control the behavior of Config.h . They need to be set before including Config.h .

#define . Description
CONFIG_IMPLEMENTATION The next #include «Config.h» will include the implementation in addition to the header. This is required for each project in exactly one .c -file.
CONFIG_VERBOSE Prints all verbose messages to stderr ( CONFIG_VERBOSE_DUPLICATE , CONFIG_VERBOSE_MISSING , CONFIG_VERBOSE_UNUSED ).
CONFIG_VERBOSE_DUPLICATE Prints to stderr, if config file contains the same key more than once.
CONFIG_VERBOSE_MISSING Prints to stderr, if config file does not contain a key specified as CONFIG_ITEM.
CONFIG_VERBOSE_UNUSED Prints to stderr, if config file contains keys not used by the application.
CONFIG_NO_EXIT_ON_ERROR No application exit on a parsing error (but output to stderr). The erroneous config will not be set to the variable.
CONFIG_DEBUG Debug output for each parsed line, only required for library testing.

About

A single-header library for parsing simple configuration files

unixforum.org

Форум для пользователей UNIX-подобных систем

  • Темы без ответов
  • Активные темы
  • Поиск
  • Статус форума

Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?

Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?

Сообщение жучара » 29.06.2019 19:28

Друзья! Оно и без этого работает.
Но всё по порядку.
Обсуждаем эту статью

Там сказано как написать исходник и собрать их него файл .tar.gz

И вот среди прочего сказано, что при выполнении ./configure (на сборочной машине) получается Makefile с длиной длинной строкой

А в Makefile вместо той кучи параметров будет указано имя файла config.h:

Которое и будет фигурировать в командной строке g++ (выборка из команды make):

Всё так и происходит. Но я специально упустил один спорный шаг автора- он говорит, что config.h нужно включать в КАЖДЫЙ из исходников. Ладно бы в один какой, а то в КАЖДЫЙ!:

Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?

Сообщение s.xbatob » 29.06.2019 19:57

Зачем в каждый? Только туда, где используются #define оттуда.

P.S. autotools за годы своего развития превратились в какой-то autohell В новых проектах его лучше не использовать. Благо, альтернативы есть, и куда более вменяемые.

Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?

Сообщение Bizdelnick » 29.06.2019 23:30

в консол и
вку́пе (с чем-либо)
в общем
в ообще
в течени е (часа)
нович ок
нюанс
п о умолчанию
приемл емо
пробле ма
проб овать
тра фик

Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?

Сообщение жучара » 30.06.2019 09:29

Тем более, что командная строка одна и та же, а значит, g++ одинаково будет работать что так, что эдак. Я писал уже это.

Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?

Сообщение Bizdelnick » 30.06.2019 10:50

в консол и
вку́пе (с чем-либо)
в общем
в ообще
в течени е (часа)
нович ок
нюанс
п о умолчанию
приемл емо
пробле ма
проб овать
тра фик

Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?

Сообщение жучара » 30.06.2019 15:56

небольшой эксперимент показал, что если заголовочный файл явно не присоединить к исходникам, то компилятор действительно о нём ничего знать не будет.

Для меня это было не столь очевидно из-за конструкции

А если я не прав в своих предположениях, тогда она просто аппендикс.

Получается, мы добавляем,

/Desktop/hello_good$ make
Making all in src
make[1]: Entering directory `/home/user/Desktops/Desktop1/hello_good/src’
make all-am
make[2]: Entering directory `/home/user/Desktops/Desktop1/hello_good/src’
g++ -I. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.cpp
mv -f .deps/main.Tpo .deps/main.Po
g++ -g -O2 -o helo main.o
make[2]: Leaving directory `/home/user/Desktops/Desktop1/hello_good/src’
make[1]: Leaving directory `/home/user/Desktops/Desktop1/hello_good/src’
make[1]: Entering directory `/home/user/Desktops/Desktop1/hello_good’
make[1]: Цель `all-am’ не требует выполнения команд.
make[1]: Leaving directory `/home/user/Desktops/Desktop1/hello_good’
user@debian:

И самое главное- зачем автор пихает #include сразу в несколько исходников? Достаточно же ведь в один (в тот, где main()).

Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?

Сообщение s.xbatob » 30.06.2019 18:17

Re: Почему при сборке из СВОИХ исходников необходимо добавлять заголовочный файл config.h в исходники?

Сообщение жучара » 30.06.2019 19:30

В своей квалификационной работе мне нужно написать консольную (необязательно консольную, но я писал консольную) программу-сервер A, которая принимала параметром имя файла. По запуску программы она устанавливала соединение с клиентами, установленными и работающими на компах в локальной сети. Разбивала файл на несколько частей по количеству соединений (в сети одновременно могло работать произвольное количество компов) произвольного размера (примерно одинаковых), шифровала каждую часть и по установленному соединению посылала каждую зашифрованную часть-файл на предназначенный ему клиент, где он хранился неопределённо долго в определённой директории.

Также писал программу-сервер B, которая совершала обратные действия- опять таки устанавливала соединения, собирала эти файлы-части, расшифровывала их, конкатенировала их в исходный файл.

Писал на плюсах, библиотеки pthread, многопоточность, проверка контрольных сумм, обмен ключами, сокеты, мокеты, госты шифрования и прочая муть.

Единственное, в чём могу ошибиться (не помню просто) быть может программы A и B были не серверами, а клиентами. Мы ведь помним, что сервер, что клиент работают абсолютно одинаково (как напишешь). Принципиальная разница лишь в момент установки соединения. Та, программа, которая слушает- та сервер. А та, которая посылает приветственное сообщение- клиент. Как у меня было, я не помню уже. И это только один проект.

Набил ли я руку в программировании? Я бы не сказал. Но до задаваемых вопросов вполне дорос, мне кажется. Я же не виноват, что в других плохих осях достаточно слепить командную строку компилятора и дело в шляпе. Вся переносимость заключается в переносе папки с программой. Потому тут такие вопросы и получаются.

упрёк принимается, но что делать-то? Другого-то всё равно ничего нет.

. И да, я просто напомню вопрос- зачем автор подключает заголовочный файл в КАЖДЫЙ исходник? Я понимаю, за автора никто не в ответе, просто спросить не кого, а может, знает кто. Извините.

Include config h windows

Config.h is a single-header library written in C for parsing configuration files .

Parsing configuration files is common task for all kinds of applications. This library parses human-readable configuration files for your existing or future C applications. Using Config.h in your application is easy. Just add Config.h to your project directory and include it.

Config.h is licensed under the ISC license

  • Single-header library for easy integration into existing projects
  • Human-readable configuration file format
  • Support of different variable types: int , double , string , bool , int[8, 16, 32, 64] , and uint[8, 16, 32, 64]
  • Simple interface with only one public function: Config_load
  • Support of function callbacks for advanced configuration control
  • Liberal license for free and commercial software

An example with all data types and a callback can be found in example.c.

A few preprocessor definitions can be set to control the behavior of Config.h . They need to be set before including Config.h .

#define . Description
CONFIG_IMPLEMENTATION The next #include «Config.h» will include the implementation in addition to the header. This is required for each project in exactly one .c -file.
CONFIG_VERBOSE Prints all verbose messages to stderr ( CONFIG_VERBOSE_DUPLICATE , CONFIG_VERBOSE_MISSING , CONFIG_VERBOSE_UNUSED ).
CONFIG_VERBOSE_DUPLICATE Prints to stderr, if config file contains the same key more than once.
CONFIG_VERBOSE_MISSING Prints to stderr, if config file does not contain a key specified as CONFIG_ITEM.
CONFIG_VERBOSE_UNUSED Prints to stderr, if config file contains keys not used by the application.
CONFIG_NO_EXIT_ON_ERROR No application exit on a parsing error (but output to stderr). The erroneous config will not be set to the variable.
CONFIG_DEBUG Debug output for each parsed line, only required for library testing.

About

A single-header library for parsing simple configuration files

Читайте также:  Hiperfile sys удалить windows
Оцените статью