по-моему я на прошлой странице привел выдержку grep'а мейкфайла говорящую о том, что qmake лазит по исходникам и выцепляет только нужные хедеры.
Это делается только если явно выполнить qmake перед make. Речь же шла об автоматизации этого процесса.
Тем более что по вашим словам смейк выполняет ту же работу, но каждый раз и все нарекания на кумейк в скорости
CMake делает это автоматически и быстро, поскольку не перегенерирует сам Makefile, а список зависимостей хранит в отдельных файлах: depend.internal и depend.make и перегенерирует их с помощью скрипта DependInfo.cmake, а не парсит файл проекта вновь и вновь.
Кроме того документация по make советует делать отдельный файл со списком зависимостей для каждого исходника/заголовочника, чтобы максимально ускорить перегенерацию. Нужно посмотреть, есть ли какая переменная в CMake для этого. В любом случае - разработчики могут добавить эту возможность в CMake в любой момент, чего не скажешь про QMake.
И это только список зависимостей. Я уже не говорю про то, что в QMake напрочь отсутствует механизм проверки формата команды для генерации целей. И здесь вам уже никакой дополнительный вызов qmake перед make не поможет - только полная пересборка проекта, даже если вы изменили формат команды для одного файла из сотни.
Пример:
1. Два файла:
main.cppC++ (Qt)
#include <stdio.h>
int main( int argc, char ** argv )
{
#ifdef BROKEN_YO
printf( "Yo enabled\n" );
#else
printf( "Yo disabled\n" );
#endif
return 0;
}
broken.proC++ (Qt)
CONFIG += console
SOURCES += main.cpp
$ qmake
$ make
$ broken
> Yo disabled
2. Добавляем макрос в pro-файл:
broken.proC++ (Qt)
CONFIG += console
DEFINES += BROKEN_YO
SOURCES += main.cpp
$ qmake
$ make
$ broken
> Yo disabled
Смотрим содержимое Makefile - макрос дейстивтельно добавлен. Пересборка не произошла.
В CMake же хранится хеш со списком форматов команд для каждой цели в файле CMakeRuleHashes.txt, который автоматически пересоберёт именно тот файл, для которого вы добавили DEFINE. Всё это делается автоматом одним вызовом make. В QMake же эту головную боль лечат отрубанием головы:
$ make clean
$ make
$ broken
> Yo enabled