function sortAlphaNum(a, b) {
var smlla = a.toLowerCase();
var smllb = b.toLowerCase();
var result = smlla > smllb ? 1 : -1;
return result;
}
Полное раскрытие: изначально я предпочел подход с подстановкой подстановки из-за его простоты, но с годами я пришел к выводу, что явное перечисление файлов менее подвержено ошибкам для крупных проектов с участием нескольких разработчиков.
Исходный ответ:
Преимущества подстановки:
Легко добавлять новые файлы по мере их перечислены только в одном месте: на диск. Отсутствие глобализации создает дублирование.
Ваш файл CMakeLists.txt будет короче. Это большой плюс, если вы есть много файлов. Не трясется заставляет вас терять логику CMake среди огромных списков файлов.
Преимущества использования жестко закодированных списков файлов:
CMake будет правильно отслеживать зависимости нового файла на диске - если мы используем glob, то файлы, которые не были скопированы в первый раз при запуске CMake, не будут pick up
Вы гарантируете, что будут добавлены только те файлы, которые вам нужны. Globbing может заблудиться файлы, которые вам не нужны.
Чтобы обойти первую проблему, вы можете просто «прикоснуться» к файлу CMakeLists.txt, который выполняет глобус, либо с помощью команды touch, либо записав файл без изменений. Это заставит CMake перезапустить и забрать новый файл.
Чтобы решить вторую проблему, вы можете аккуратно организовать свой код по каталогам, что вы, вероятно, и так делаете. В худшем случае вы можете использовать команду list (REMOVE_ITEM)
, чтобы очистить глобальный список файлов:
file(GLOB to_remove file_to_remove.cpp)
list(REMOVE_ITEM list ${to_remove})
Единственная реальная ситуация, когда это может вас укусить, - это использование чего-то вроде git-bisect , чтобы попробовать старые версии вашего кода в том же каталоге сборки. В этом случае вам, возможно, придется очистить и скомпилировать больше, чем необходимо, чтобы убедиться, что вы попали в список нужных файлов. Это такой угловой случай,