Существует ли какое-либо программное обеспечение для перекомпиляции проекта программного обеспечения на основе CMake при изменениях файлов? - PullRequest
4 голосов
/ 07 февраля 2011

Я работаю над программным проектом C ++, который использует CMake в качестве своей системы сборки. Программное обеспечение построено на Mac OS / X, Linux и Windows.

Чтобы улучшить мой обычный цикл взлома / компиляции / тестирования, мне было интересно, есть ли, возможно, какое-нибудь демоноподобное программное обеспечение, которое знает обо всех исходных файлах, рассмотренных проектом CMake. Всякий раз, когда любой из исходных файлов изменяется, демон замечает это и перестраивает затронутые цели. Идея состоит в том, что этап «компиляции» в моем цикле станет быстрее, потому что он может просто сразу же вернуться, говоря: «Ничего не поделаешь, так как ваш дружественный сосед сборочный демон уже перестроил все файлы».

Кто-нибудь знает о существующем программном обеспечении, которое может это сделать? Если нет - возможно ли каким-то образом экспортировать список исходных файлов, рассматриваемых CMake, чтобы я сам мог написать небольшого демона, который следит за этими файлами и автоматически запускает make (или что-то еще, подходящее для выбранного генератора)? В лучшем случае я бы также получил дерево зависимостей, чтобы я мог пропустить проверку всех зависимостей снова и снова и просто обновить нужные мне цели.

1 Ответ

2 голосов
/ 07 февраля 2011

Я использовал JNotify для успешного мониторинга изменений файла без особых хлопот.

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

Хороший пример кода можно найти здесь .

Вы можете сделать что-то вроде этого:

class CMakeListener implements JNotifyListener {
    public void fileModified(int wd, String rootPath, String name) {
       // if a file is a cpp or hpp file, execute CMake
    }
}

и ваша задача CMake должна быть хорошо автоматизирована.

...