ну как туда ui добавлен, поидее он должен видеть что ui изменился и перегенирировать его
Нет, CMake только генерирует, но за файлами не следит
Почему не следит. Может MOC это не касается, но если меняются исходники, он успешно подхватывает их изменения при билде, даже без явного вызова генерации
Разве не сторонний инструмент вызывает CMake?
Имеете ввиду IDE/пользователя?
Да. Не конкретно же демон какой-то его следит. Следит IDE, которая должна его вызывать
Может у меня неправильное представление. Сам я пишу в vim и я не знал что можно настроить автовызов в самом cmake. Только про сторонние средства слышал
Так-то да. И генерация симейком и билд симейком вызывается ide/пользователем. Я о том, что если сгенерировать симейком, собрать проект, поменять исходники/симейк, и опять вызвать сборку (без явной перегенерации), то симейк подхватит эти изменения без проблем.
А что касается автовызовов, CLion умеет такое делать при изменении симейков. Можно автоматически, можно вручную.
Так не симейк подхватил, а IDE подхватила и заставила его перегенерировать
нет-нет. Даже если без IDE, а через CLI, то обновление исходников он увидит. Проверяет время последнего изменения файла и время последней генерации
Я что-то совсем не понимаю. Как это через консоль задать? У cmake есть какой-то фоновый процесс? Когда он отключается/включается?
Я думал, что если ты не вызовешь cmake, то он собственно и не вызовется. Мне кажется что у нас какое-то недопонимание. Я был уверен в том что все работает именно так
Фонового процесса никакого нет. Насколько я понимаю, механизм следующий 1. Пользователь вызывает генерацию 2. cmake генерирует make/etc. и рядом в билд директории кладёт время последнего изменения или хэши исходников 3. Пользователь билдит проект 4. Пользователь меняет какой-то файл исходников 5. Пользователь билдит проект еще раз (не вызывая генерацию явно) 6. Симейк видит, что время изменения/хэш исходников изменился, и вызывает перегенерацию и ребилд этого таргета
Каким образом он не вызывает генерацию явно? Он же просто обращается к симейку, а тот уже проверяет надо ли ему что-то генерировать. А собирает проект уже условный make
Он всегда ее явно вызывает. Просто генерация не всегда происходит
Даже если вызывать через make, а не cmake --build, то всё равно подхватывает изменения сорсов. Видимо, такие хитрые мейки он генерирует, что это возможно
Хотя, я понял о чем ты.
Ты включаешь в изменение исходников скажем добавление нового файла?
Или только редактирование существующих исходников
Сейчас проверю. Даже интересно
Добавление в симейклистс, правильно?
Это уже точно не сработает. Среда изменилась
Ты должен перегенировать CMake только при изменении файлов CMake
Во всех остальных ситуациях этого делать не нужно.
Кстати, можешь попробовать перенести билд деректорию в другое место и попробовать собрать. Не соберется. По скольку симейк генерирует мейк файлы со стаческими путями к исходникам
Обсуждают сегодня