Лучше указать исходные файлы с GLOB или каждый файл отдельно в CMake?

function sortAlphaNum(a, b) {
    var smlla = a.toLowerCase();
    var smllb = b.toLowerCase();
    var result = smlla > smllb ? 1 : -1;
    return result;
}
139
задан Ciro Santilli 新疆改造中心996ICU六四事件 22 November 2017 в 06:45
поделиться

1 ответ

Полное раскрытие: изначально я предпочел подход с подстановкой подстановки из-за его простоты, но с годами я пришел к выводу, что явное перечисление файлов менее подвержено ошибкам для крупных проектов с участием нескольких разработчиков.

Исходный ответ:


Преимущества подстановки:

  • Легко добавлять новые файлы по мере их перечислены только в одном месте: на диск. Отсутствие глобализации создает дублирование.

  • Ваш файл 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 , чтобы попробовать старые версии вашего кода в том же каталоге сборки. В этом случае вам, возможно, придется очистить и скомпилировать больше, чем необходимо, чтобы убедиться, что вы попали в список нужных файлов. Это такой угловой случай,

175
ответ дан 23 November 2019 в 22:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: