anonymous@RULINUX.NET~# Last login: 2022-01-27 15:20:17
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[C] Собрать кучу h-файлов в один большой

Дано: куча мелких h-файлов, объявляющих и определяющих свои узкоспециализированные функции.

Хочу: на выходе получить один большой h-файл, включающий в себя все мелкие. Для примера см. sqlite3.c, который включает в себя 102 отдельных файла, т. н. амальгамация.

Как такого добиться?

Пока что у меня вот такая команда: gcc -E input.h -nostdinc -C > input_full.h, но там все макросы исчезли и вообще каша на выходе. А хотелось бы получить более-менее читаемый файл.

ЗЫ input.h

C

#include <stdio.h>
#include <time.h>

#include "some_file.h"
#include "some_cool_file.h"
#include "another_file.h"

int cool_func (int a, char *msg, void *ptr)
{
    if (ptr == NULL)
        random(time(NULL));
    printf("%d: %s\n", a, msg);
}
 

anonymous(*) (2016-07-15 19:22:42)
Отредактировано vilfred по причине "не указана"

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: [C] Собрать кучу h-файлов в один большой от anonymous 2016-07-15 19:22:42
avatar
Скрыть

Re:[C] Собрать кучу h-файлов в один большой

Кто ж в .h реализацию функций помещает? Ну а cat тогда не устроит?

Vasily(*)(2016-07-15 19:39:12)

Mozilla/5.0 (X11; FreeBSD amd64; rv:40.0) Gecko/20100101 Firefox/40.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:[C] Собрать кучу h-файлов в один большой от Vasily 2016-07-15 19:39:12
avatar
Скрыть

Re:[C] Собрать кучу h-файлов в один большой

Хотелось бы иметь возможность как включать input.h, так и один большой input_full.h. Т. е. оба файла должны быть нормально компилируемыми.

anonymous(*)(2016-07-15 20:01:42)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[C] Собрать кучу h-файлов в один большой от Vasily 2016-07-15 19:39:12
avatar
Скрыть

Re:[C] Собрать кучу h-файлов в один большой

Да, ты прав, cat рулит. Нет, не рулит. Некоторые мелкие файлы любят включать в себя другие мелкие файлы, так что такой простой способ не годится. Нужно через препроцессор как-то, я думаю.

make

tclsqlite3.c:   sqlite3.c
        echo '#ifndef USE_SYSTEM_SQLITE' >tclsqlite3.c
        cat sqlite3.c >>tclsqlite3.c
        echo '#endif /* USE_SYSTEM_SQLITE */' >>tclsqlite3.c
        cat $(TOP)/src/tclsqlite.c >>tclsqlite3.c
 

anonymous(*)(2016-07-15 20:04:24)
Отредактировано anonymous по причине "не указана"
[#] [Добавить метку] [Редактировать] Ответ на: Re:[C] Собрать кучу h-файлов в один большой от anonymous 2016-07-15 20:01:42
avatar
Скрыть

Re:[C] Собрать кучу h-файлов в один большой

> иметь возможность как включать input.h, так и один большой input_full.h

А нельзя создать input_full.h, который будет просто иклюдить всю мелочь?

anonymous(*)(2016-07-15 20:33:54)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[C] Собрать кучу h-файлов в один большой от anonymous 2016-07-15 20:33:54
avatar
Скрыть

Re:[C] Собрать кучу h-файлов в один большой

Можно, но если я захочу подключить этот input_full.h из какого-нибудь другого проекта (с относительным путём, например, ../input_full.h), мне придётся эту всю мелочь таскать с собой.

anonymous(*)(2016-07-18 12:32:27)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[C] Собрать кучу h-файлов в один большой от anonymous 2016-07-18 12:32:27
avatar
Скрыть

Re:[C] Собрать кучу h-файлов в один большой

Да.

Кстати, это не для твоих целей сделали: https://github.com/dwd31415/single-c-file?

anonymous(*)(2016-07-18 18:10:57)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[C] Собрать кучу h-файлов в один большой от anonymous 2016-07-18 18:10:57
avatar
Скрыть

Re:[C] Собрать кучу h-файлов в один большой

Не знаю. Изобрёл свой велосипед через cat с парой #ifndef-ов.

anonymous(*)(2016-07-18 18:15:08)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[C] Собрать кучу h-файлов в один большой от anonymous 2016-07-18 18:10:57
avatar
Скрыть

Re:[C] Собрать кучу h-файлов в один большой

Эта тварь не понимает КОИ-8! Испоганила мне все комментарии, а описательные комментарии вида "// это функция не делает ничего, но нужна" - выбросила.

anonymous(*)(2016-07-18 18:30:23)

Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!