Comments 5
https://cmake.org/cmake/help/latest/command/file.html#glob
Note
We do not recommend using GLOB to collect a list of source files from your source tree. If no CMakeLists.txt file changes when a source is added or removed then the generated build system cannot know when to ask CMake to regenerate. The CONFIGURE_DEPENDS
flag may not work reliably on all generators, or if a new generator is added in the future that cannot support it, projects using it will be stuck. Even if CONFIGURE_DEPENDS
works reliably, there is still a cost to perform the check on every rebuild.
А как лучше сделать тогда? Прописать руками конечно можно, но долго, можно сделать python скрипт, который сделает файл .cmake
с макросом, в котором добавляются имена исходных файлов. Кроме глоб CMake что-нибудь предоставляет?
Именно вручную и рекомендуется. Не так часто в проектах добавлять и удалять файлы десятками требуется.
Хидера вообще не надо включать в сборку. Пути поиска должны быть настроены, чтобы компилятор все нашел. А CMake прекрасно разберется. (Оговорка для MSVC - для красивого дерева проекта можно напильником доточить https://cmake.org/cmake/help/latest/command/source_group.html#source-group)
Менять глобальные переменные внутри своего проекта - плохая практика, ломающая source-only включения разных проектов. Target-oriented опции, настройки и параметры - лучше и более точны.
Указывать тип библиотеки - нежелательно. Сборщик имеет право выбирать (https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html#build-shared-libs)
Пропущен очень интересный этап install с использованием CPack, который переписывает бинари, делая их пригодными к переносу из дерева сборки.
CMake предоставляет https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html#gnuinstalldirs чтобы вручную пути назначения для разных артефактов не указывать.
Если есть библиотека, то было бы неплохо реализовать в ней поддержку CMake, для пользователей библиотеки и предоставить CMake Config файлы.
Хидера вообще не надо включать в сборку.
Это заблуждение от тех, кто ни разу не открывал сгенерированные sln-ы в Visual Studio. Если их не прописать - собираться будет, но хидеры в дереве проекта показываться не будут. Что неудобно и местами раздражает.
Так что и их лучше тоже прописать.
Сборка на CMake для новичка