По-прежнему, по крайней мере, насколько мне известно, в CMake нет стандартного способа указать добавление предварительно скомпилированного заголовка (PCH) в проект кросс-платформенным способом, поскольку способ обработки PCH с помощью компиляторов С++ очень разные среди поставщиков. Для g++ это обычно работает, просто добавляя настраиваемую команду, которая заботится о вызове компилятора с соответствующим вводом и генерирует его PCH.
Моя текущая проблема заключается в том, что CMake не будет анализировать зависимости зависимостей, которые вы указали для пользовательской команды. Например, предположим следующую структуру:
pch.h
|- dependA.h
|- dependB.h
...
Только предоставление pch.h
в качестве зависимости приведет к генерации соответствующей цели в соответствующем makefile
, который отслеживает изменения в pch.h
. Однако CMake не анализирует входящие внутри pch.h
и поэтому не распознает изменения в dependA.h
и dependB.h
. Это расширяется, если существуют зависимости для dependsA.h
и т.д.
Примечание. Я знаю, что тот факт, что зависимости PCH могут и регулярно меняться, ставит весь рассматриваемый процесс. Тем не менее, это так, как есть, и я не могу ничего с этим поделать.
Поскольку задача не слишком сложная, есть несколько очевидных идей, которые приходят на ум:
Решение A:
Введите все зависимости вручную. Очевидно, это работает, но утомительно, как черт, и вообще не масштабируется.
Решение B:
Если возможно, напишите функцию CMake, которая автоматизирует процесс и разбор включает в себя "вручную".
Решение C:
Сделайте что-то подобное на другом языке, например Python, и просто представьте CMake список зависимостей, чтобы добавить к пользовательской команде.
Решение D:
Используйте функцию gcc
/g++
, чтобы проанализировать и распечатать дерево зависимостей PCH и проанализировать вывод, чтобы извлечь список зависимостей.
Мой вопрос: кто-нибудь знает более удобный и быстрый способ сделать это?