Первоначально я задал этот вопрос в списке рассылки 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.