Лучший способ указать исходные файлы в CMake - это , перечислив их явно .
Создатели CMake сами советуют не использовать globbing.
См .: http://www.cmake.org/cmake/help/v3.3/command/file.html?highlight=glob#file
(Мы не рекомендуем использовать GLOB для сбора списка исходных файлов из дерева исходных текстов. Если файл CMakeLists.txt не изменяется при добавлении или удалении источника, то сгенерированная система сборки не может знать, когда попросить CMake сгенерировать заново. )
Конечно, вы, возможно, захотите узнать, каковы недостатки - читайте дальше!
Когда сбои не удаляются:
Большим недостатком глобализации является то, что создание / удаление файлов не приведет к автоматическому обновлению системы сборки.
Если вы являетесь человеком, добавляющим файлы, это может показаться приемлемым компромиссом, однако это создает проблемы для других людей, создающих ваш код, они обновляют проект из системы контроля версий, запускают сборку, а затем связываются с вами, жалуясь, что
"сборка сломана".
Что еще хуже, сбой, как правило, дает некоторую ошибку компоновки, которая не дает никаких указаний на причину проблемы и теряется время на ее устранение.
В проекте, над которым я работал, мы начинали с глобализации, но получали столько жалоб при добавлении новых файлов, что было достаточно оснований явно перечислять файлы вместо глобализации.
Это также нарушает общие рабочие процессы git
(git bisect
и переключение между функциональными ветвями).
Так что я не мог бы порекомендовать это, проблемы, которые это вызывает, намного перевешивают удобство, когда кто-то из-за этого не может создать ваше программное обеспечение, он может потерять много времени, чтобы отследить проблему или просто сдаться.
И еще одно замечание: просто помнить о прикосновении CMakeLists.txt
не всегда достаточно, с автоматическими сборками, использующими глобирование, мне пришлось запускать cmake
перед каждой сборкой , так как файлы могут были добавлены / удалены со времени последнего строительства *.
Исключения из правила:
Бывают моменты, когда предпочтительнее использовать шатание:
- Для настройки файлов
CMakeLists.txt
для существующих проектов, которые не используют CMake.
Это быстрый способ получить ссылки на все источники (после запуска системы сборки - замените глобализацию явными списками файлов).
- Когда CMake не используется в качестве основной системы сборки, если, например, вы используете проект, который не использует CMake, и вы хотите сохранить свою собственную систему сборки для это.
- Для любой ситуации, когда список файлов меняется так часто, что его становится нецелесообразно поддерживать. В этом случае может быть полезным, но тогда вы должны принять запуск
cmake
для генерации файлов сборки каждый раз для получения надежной / правильной сборки (что происходит против намерения CMake - возможность отделить конфигурацию от сборки) .
* Да, я мог бы написать код для сравнения дерева файлов на диске до и после обновления, но это не очень хороший обходной путь, и что-то лучше оставить для системы сборки.