Как настроить цель или команду CMake для предварительной обработки файла C?

Первоначально я задал этот вопрос в списке рассылки CMake :. Как настроить цель или команду для предварительной обработки файла C?

Я переношу конфигурацию сборки на основе GNU Autotools в CMake, и мне приходится иметь дело с предварительной обработкой C для создания файла.

Входными данными для препроцессора является файл SQL с используемыми директивами препроцессора C , например #include "another.sql"и т. д.

В настоящее время Makefileиспользует следующее правило для создания простого SQLфайла в качестве вывода:

myfile.sql: myfile.sql.in.c
    cpp -I../common $< | grep -v '^#' > $@

Таким образом, myfile.sqlдолжен быть одним из продуктов процесса сборки, подобно общим библиотекам или исполняемым файлам.

Какие инструменты CMake следует использовать для достижения того же эффекта?

Мне неясно, следует ли мне использовать add_custom_command, add_custom_targetили комбинировать оба.

Очевидно, я ищу портативное решение, которое будет работать, по крайней мере, с наборами инструментов GNU GCC и Visual Studio . Я предполагаю, что мне придется определить специфичные для платформы -пользовательские команды, одну для препроцессора cpp, одну для cl.exe /P.

Или CMake предоставляет какую-либо абстракцию для препроцессора C?

Я просмотрел архивы, но нашел только предварительную обработку файлов на фортране или решения, основанные на возможностях make :make myfile.i Значит, это не совсем то, что я ищу.

ОБНОВЛЕНИЕ:Добавлен ответ на основе решения , полученного от Петра Кмоха в списке рассылки CMake.

7
задан Community 23 May 2017 в 11:58
поделиться