mingw32-сделайте: “Входная строка слишком долго” проблема

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

5
задан vy32 17 April 2010 в 01:07
поделиться

1 ответ

Явно реализованные элементы интерфейса не просто частные. Они общедоступны - вроде как.

Они общедоступны в том смысле, что любой код, который может ссылаться на интерфейс, может их вызывать. (Если сам интерфейс не является общедоступным, то я думаю, вы могли бы сказать, что они фактически имеют тот же уровень доступа, что и интерфейс.)

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

C # 3.0 спецификация говорит об этом так:

Явный член интерфейса реализации имеют разные характеристики доступности, чем другие члены. Поскольку явное реализации члена интерфейса никогда не доступны через их полностью полное имя в вызове метода или доступ к собственности, они находятся в чувство приватности. Однако, поскольку они могут доступ через интерфейс например, они в некотором смысле также просто потому, что нам нужна более чистая система сборки) заключалась в том, чтобы каждый «модуль» выполнял сборку за несколько проходов.

Так, например, у вас есть 3 модуля: A, B и C.

Ваш контрольный make-файл просто вызывает каждый файл make-файла модулей с одной и той же целью.

Затем мы устанавливаем цели как согласованные clean, header, lib и exec.

Итак, make-файл управления был примерно таким:

modules=A B C
clean:
    for i in $modules:
        ( cd $i ; make clean ; cd .. )
header:
    for i in $modules:
        ( cd $i ; make header ; cd .. )
lib:
    for i in $modules:
        ( cd $i ; make lib ; cd .. )
exec:
    for i in $modules:
        ( cd $i ; make exec ; cd .. )

Каждый модуль, у которого были файлы заголовков, необходимы другие модули скопировали эти файлы заголовков в центральное место на этапе заголовка. Затем, во время фазы lib или exec, каждый модуль должен был использовать только это центральное расположение, чтобы найти все свои заголовки. Это также ограничивало использование модулей только теми заголовками, которые были опубликованы в центральном расположении другими модулями.

Аналогичным образом, каждый модуль, создавший библиотеку, необходимую для фазы exec, скопировал эту библиотеку в центральное место. Это значительно уменьшило количество предложений -I (включаемый каталог) и -L (каталог библиотеки) в командах сборки.

Используя эту схему, вы могли перестроить все, просто используя выполнение make clean header lib exec на верхнем уровне (или оставьте clean для правильной сборки make с учетом зависимостей).

Это один из способов обойти ваша проблема, но мне интересно , как вы превышаете лимит. 8K, даже при 25 символах на путь, потребуется около 300 различных путей включения. Неужели ваша иерархия такая объемная?

Обновление 1:

Если вы ищете быстрый, а не грязный способ заставить ее работать без изменения «архитектуры» make-файла, вы пишете сценарий, который, учитывая список каталогов, будет копировать все файлы заголовков из этих каталогов в центральное место.

Затем запустите его в качестве первого шага во всех ваших правилах и измените операторы include в ваших строках компиляции, чтобы просто ссылка на это место, а не на большой список Вы даже можете выполнять копирование поэтапно (например, 20 каталогов за раз x 20 раз могут обрабатывать в общей сложности 400 каталогов).

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

Обновление 2:

Еще одним решением, как вы указали в своих комментариях, было создание псевдонима для пути.

Вы должны иметь возможность сделать это с помощью subst.exe , например:

> subst x: "c:\Documents and Settings\Pax\My Documents\Not my directory"
> dir x:
  Volume in drive X has no label.
  Volume Serial Number is 8AA3-703A

  Directory of X:\

  08/09/2009  10:12 AM    <DIR>          .
  08/09/2009  10:12 AM    <DIR>          ..
  24/08/2009  01:54 PM             6,409 p0rn_sites.txt
  09/07/2008  02:49 PM    <DIR>          downloaded_p0rn
  : : :
  09/07/2008  02:52 PM    <DIR>          other_suspect_stuff
                 3 File(s)         18,520 bytes
                18 Dir(s)  63,840,849,920 bytes free

> subst x: /d
> dir x:
  The system cannot find the path specified.
4
ответ дан 15 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: