Насколько я понимаю, ваша конфигурируемая библиотека является общей для разных проектов и использует разные определения для каждого проекта.
Невозможно преодолеть перекомпиляцию в этом случае, независимо от ускоренной сборки или любой другой системы сборки. Между компиляциями файлов cpp предварительно обработанные файлы имеют изменения.
Если вы хотите избежать перекомпиляции, один из вариантов - разделить библиотеку конфигурации на разные библиотеки для каждого проекта, но в зависимости от того, как выглядит config
, наличие большого количества дублирующегося кода редко желательно ...
Единственный другой вариант, о котором я могу подумать, - это сокращение объема кода, который необходимо каждый раз перекомпилировать.
например. у вас есть исходный файл LargeFunction.cpp
с
#if CONFIG_DEFINE_1
void VeryLargeFunction() {
...
}
#elif CONFIG_DEFINE_2
void VeryLargeFunction() {
...
}
#endif
Разделите его на три файла, один из которых содержит функцию VeryLargeFunction, как определено для DEFINE_1, один - как определено для DEFINE_2, а другой - просто включает эти два на основе значений определений.
#if CONFIG_DEFINE_1
#include "definitionFileFor1"
#elif CONFIG_DEFINE_2
#include "definitionFileFor2"
#endif
Этот файл по-прежнему нужно перекомпилировать каждый раз, но объектные файлы, содержащие «настоящий» код, не будут.
Вы будете эффективно связывать существующие объектные файлы только при каждой компиляции, т.е. перекомпилировать все
Недостаток заключается в дополнительном обслуживании, и различные определения функций находятся в разных файлах, поэтому код становится немного сложнее для чтения.