Могу ли я развернуть встроенные файлы #include и не раскрывать директивы? - PullRequest
0 голосов
/ 05 января 2010

Я пытаюсь упростить развертывание приложения. Чтобы построить окончательное приложение на компьютере конечного пользователя, необходимо скомпилировать пару файлов C . Это означает, что десятки файлов заголовков должны быть отправлены вместе с приложением. Я хотел бы иметь возможность предварительно включать содержимое включаемых файлов, , но Мне также нужно иметь возможность управлять директивами (#if и т. Д.) После того, как включения будут встроены , Я не могу найти опцию cpp, которая позволяет мне просто включать заголовки, не делая остальную часть предварительной обработки. Какие у меня варианты?

Пример:

File1.h

void dummy_func()
{return;}

File2.h

#if INCLUDE_FILE1
    #include "file1.h"
#endif

В конце я хочу файл с надписью:

#if INCLUDE_FILE1
void dummy_func()
{return;}
#endif

Ответы [ 3 ]

0 голосов
/ 05 января 2010

Чтобы построить конечное приложение на компьютере конечного пользователя, необходимо скомпилировать пару файлов C. Это означает, что десятки файлов заголовков должны быть отправлены вместе с приложением.

И что? Если вы поместили все файлы (включая заголовки) в tarball, и у вас есть система нормальной сборки (у вас do есть хотя бы Makefile, не так ли?), В чем проблема с большим файлов?

0 голосов
/ 05 января 2010

Из-за двойного включения защиты инструмент, который вставляет #include, может вызвать гигантский файл, где многие заголовки полностью находятся внутри #ifndefs, которые не совпадают. В крайних случаях это может даже привести к выходному файлу бесконечного размера, если включения являются рекурсивными (что обычно не является проблемой из-за двойного включения защиты).

Я только что подтвердил, что этот код успешно компилируется:

main.cpp:

#include "a.h"
int main() { return 0; }

хиджра:

#ifndef A_H_INCLUDED
#define A_H_INCLUDED

#include "b.h"

#endif

b.h:

#ifndef B_H_INCLUDED
#define B_H_INCLUDED

#include "a.h"

#endif

Поскольку вы хотите, чтобы ifdefs не затрагивались и не разбирались, инструмент, который вставляет #includes, будет вызывать бесконечный вывод.

0 голосов
/ 05 января 2010

Как насчет использования #ifdef для управления тем, какие разделы #if компилируются?

...