Только запустить препроцессор 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 и пользовательскими целями это должно быть довольно просто.