Материал в %{ ... %}
передается напрямую на выход;это само по себе не интерпретируется SWIG.Таким образом, #include
предназначен для того, чтобы сгенерированный код C / C ++ содержал этот заголовок.
%include
, напротив, является директивой SWIG.Он говорит SWIG обработать этот заголовочный файл перед продолжением.Таким образом SWIG узнает (и сгенерирует оболочки) для типов и функций, объявленных в этом заголовочном файле.
Если заголовок очень сложный, это может привести к путанице в SWIG или привести к очень большому выводу (так как SWIG пытаетсясоздать оболочку для всего внутри).В таких случаях лучше вручную объявить только те части заголовка, которые необходимо обработать SWIG, и пропустить %include
.Но вы все равно можете захотеть #include
для того, чтобы сгенерированный C ++ скомпилировался.
[update]
Что касается «предпочитаемого», то SWIG больше о том, что работает, чем о том, что «предпочтительно»"... Если у вас есть очень чистый заголовочный файл, объявляющий хороший интерфейс для одного класса, вы можете просто %include
его и SWIG автоматически сгенерировать оболочки.Если ваш заголовочный файл очень волосатый (например, iostream
), вы должны вручную указать SWIG, что нужно обернуть.Но нет жесткого и быстрого правила.