Найкращий спосіб вказати вихідні файли в CMake - це чітко вказати їх .
Самі творці CMake радять не використовувати глобінг.
Дивіться: https://cmake.org/cmake/help/v3.15/command/file.html?highlight=glob#file
(Ми не рекомендуємо використовувати GLOB для збору списку вихідних файлів з вашого вихідного дерева. Якщо жоден файл CMakeLists.txt не змінюється, коли джерело додається або видаляється, то створена система збірки не може знати, коли просити CMake відновити.)
Звичайно, можливо, ви захочете дізнатися, які недоліки - читайте далі!
Коли глобус не вдається:
Великим недоліком глобалізації є те, що створення / видалення файлів не оновлює автоматично збірку системи.
Якщо ви є особою, яка додає файли, це може здатися прийнятним компромісом, однак це спричиняє проблеми іншим людям, які будують ваш код, вони оновлюють проект із контролю версій, запускають збірку, а потім зв'язуються з вами, скаржившись, що
"збірка зламаний ».
Що ще гірше, помилка, як правило, дає деяку помилку посилання, яка не дає жодних підказів щодо причини проблеми, і час на її усунення втрачається.
У проекті, над яким я працював, ми розпочали глобалізацію, але отримали так багато скарг, коли були додані нові файли, що це було достатньою підставою для явного переліку файлів замість глобалізації.
Це також порушує загальні робочі потоки git
( git bisect
та перемикання між функціональними гілками).
Тому я не міг рекомендувати це, проблеми, які він викликає, значно перевищують зручність, коли хтось не може створити ваше програмне забезпечення через це, вони можуть втратити багато часу, щоб відстежити проблему або просто відмовитись.
І ще одна примітка: просто пам'ятати, що торкатися CMakeLists.txt
не завжди достатньо, з автоматизованими побудовами, які використовують глобулінг, мені довелося запускати cmake
перед кожною збіркою, оскільки файли, можливо , були додані / вилучені з останньої будівлі *.
Винятки з правила:
Бувають випадки, коли глобус кращий:
- Налаштування
CMakeLists.txt
файлів для існуючих проектів, які не використовують CMake.
Це швидкий спосіб отримати все посилання на джерело (після запуску системи збирання - замініть глобалізацію явними списками файлів).
- Якщо CMake не використовується в якості основної системи збирання, якщо, наприклад, ви використовуєте проект, який не використовує CMake, і ви хочете підтримувати власну систему збирання для нього.
- У будь-якій ситуації, коли список файлів змінюється так часто, що підтримувати їх недоцільно. У цьому випадку це може бути корисним, але тоді вам доведеться щоразу приймати запуск
cmake
для створення файлів збірки, щоб отримати надійну / правильну збірку (що суперечить наміру CMake - можливості розділити конфігурацію від будівлі) .
* Так, я міг би написати код для порівняння дерева файлів на диску до та після оновлення, але це не такий приємний спосіб вирішення, і щось краще залишається в системі збирання.