Как я могу использовать boost.wave в качестве препроцессора с помощью cmake - PullRequest
0 голосов
/ 10 декабря 2010

Я пытаюсь использовать boost.wave в качестве препроцессора вместо препроцессора, который поставляется вместе с компилятором.Я не могу понять, как этого добиться.

Я использую CMake в качестве генератора системы сборки, и как я могу указать, что мой препроцессор - boost.wave.Это должно работать как на Windows (MSVC), так и на Linux (GCC).

Поиск в Google и поиск в архивах переполнения стека не дали никакого ответа


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

1 Ответ

2 голосов
/ 10 декабря 2010

Это двухэтапный процесс.

Во-первых, вы должны указать CMake использовать Wave в качестве пользовательской команды: используйте CMake add_custom_command. После того, как вы определили эту команду, она будет вызываться всякий раз, когда сопоставляются зависимости, заданные вами для пользовательской команды.

Во-вторых, вам нужно выяснить все предопределенные макросы и (системные) пути, которые ваш компилятор обычно использует. Wave ничего не знает о конкретном компиляторе. Следовательно, для правильной предварительной обработки файла для конкретного компилятора все (соответствующие) предопределенные макросы (которые обычно предопределены компилятором) и все системные включающие пути (которые обычно известны компилятору по умолчанию) должны быть переданы при вызове Волна. Если поместить все эти параметры в командную строку Wave слишком утомительно (и, вероятно, так и есть), вы можете создать файл параметров для Wave (добавьте его в командную строку с помощью @cfgfile). Вот пример для MSVC 2005:

-SC:\Program Files (x86)\Microsoft Visual Studio 8\VC\include
-SC:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include
-D_MT
-D_MSC_VER=1400
-D_MSC_FULL_VER=140050727
-D_MSC_EXTENSIONS
-D_M_IX86

Конечно, вы также можете добавить другие параметры для Wave. Наличие разных файлов конфигурации для разных компиляторов должно облегчать управление изнутри CMake.

...