2013-10-14 2 views
10

По-прежнему, по крайней мере, насколько мне известно, в CMake нет стандартного способа указать добавление предварительно скомпилированного заголовка (PCH) в проект кросс-платформенным способом, поскольку способ обработки PCH с помощью компиляторов C++ очень между поставщиками. Для G ++ это обычно выполняется, просто добавляя пользовательскую команду , которая заботится о вызове компилятора с соответствующим вводом и генерирует его PCH.CMake - автоматическая зависящая зависимость предварительно скомпилированного заголовка?

Моя текущая проблема заключается в том, что CMake не будет анализировать зависимости зависимостей, которые вы указываете для пользовательской команды. Например, предположим следующую структуру:

pch.h 
|- dependA.h 
|- dependB.h 
... 

только предоставление pch.h как зависимость приведет к генерации соответствующей мишени в соответствующем makefile, который отслеживает изменения в pch.h. Однако CMake не анализирует, включает внутриpch.h и поэтому не распознает изменения dependA.h и dependB.h. Это распространяется дальше, если существуют зависимости для dependsA.h и т. Д.

Примечание: Я знаю, что тот факт, что зависимости PCH и могут меняться, регулярно ставит весь процесс в вопрос. Однако, это так, как есть, и я не могу ничего с этим поделать.

Поскольку задача не слишком сложна, есть несколько очевидных идеи, которые приходят на ум:

Решения A:

Введите всю зависимость вручную. Очевидно, что это работает, но утомительно, как черт, и вовсе не масштабируется.

Раствор Б:

Если возможно, написать функцию CMake, которая автоматизирует процесс и разбора включает в себя «вручную».

Решение C:

ли что-то подобное с использованием другого языка, например, Python, и просто предоставить Cmake список зависимостей, чтобы добавить к пользовательской команде.

Раствор D:

Использование gcc/g++ «s функция для разбора и распечатать дерево зависимостей от PCH и разобрать выход для извлечения списка зависимостей.

Мой вопрос: кто-нибудь знает более удобный и быстрый способ сделать это?

ответ

4

IMPLICIT_DEPENDS вариант из add_custom_command может сделать трюк:

add_custom_command(
    OUTPUT outFile 
    COMMAND ... 
    IMPLICIT_DEPENDS CXX "pch.h") 

IMPLICIT_DEPENDS Опция делает генерируемая систему сборки сканирования неявных зависимостей данного входной файл во время сборки. Тем не менее, он поддерживается только для генераторов Makefile.

+0

Спасибо! Я попробую. Жаль, что он не будет работать с ниндзя. – thokra

+0

Знаете ли вы, что «сканер зависимостей» реализован make или может использоваться в коде cmake для получения включенных файлов и добавления их вручную в качестве зависимостей? – Knitschi

Смежные вопросы