Только запустить препроцессор C в cmake?

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

Мой план состоит в том, чтобы cmake запустил препроцессор C в исходном коде ядра, превратив cl файл и его включение в единый блок, с которым легче работать.

Я могу использовать add_custom_command, чтобы сделать это, вызвав gcc/clang с -E, но тогда я не получу флаги для включения правильных каталогов для поиска различных файлов заголовков в команде, и я не вижу простой способ найти все текущие включенные каталоги для использования в пользовательском вызове компилятору.

Есть ли способ запуска только препроцессора C в файле с текущей средой cmake?

Ответы

Ответ 1

CMake автоматически создает цели для файлов предварительной обработки. Для каждого foo.c в вашем проекте есть foo.i сделать цель, которая будет запускать только препроцессор (со всеми соответствующими флагами -D и -I и т.д.). Запустите make help, чтобы увидеть все другие потенциально полезные цели, которые CMake генерирует в ваших файлах.

Кстати, я не вижу, как с этим "единым блоком" будет легче работать с вами.

Ответ 2

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

В качестве альтернативы вы можете просто установить для свойства COMPILE_FLAGS объекта "-E", который достигнет такого же эффекта, но будет локальным для этой цели.

Ответ 3

Я бы предложил другой подход.

С cmake и пользовательскими целями это должно быть довольно просто.