У меня есть решение Visual Studio C ++, в котором, похоже, есть проблема с зависимостями. Вот некоторая информация:
- Он всегда правильно собирается в режиме отладки.
- Он всегда собирается правильно в режиме выпуска, если я сначала делаю «Чистое решение»
- В противном случае он неправильно строится в режиме Release. Если я обновлю значение в заголовочном файле, скомпилированный результат все равно будет иметь старое значение.
Вот дополнительная информация. Параметр, который я изменяю, является единственным значением в моем файле release.h. Этот файл имеет одну строку, где я #define VERSION. VERSION используется в функции, которая возвращает текущую версию моего программного обеспечения. Когда я собираю после изменения этого значения в заголовочном файле, система правильно распознает, что исходный файл должен быть перекомпилирован. После того, как он перекомпилирует исходный файл, я получаю следующее:
1> Generating code
1> 0 of 168 functions ( 0.0%) were compiled, the rest were copied from previous compilation.
1> 0 functions were new in current compilation
1> 0 functions had inline decision re-evaluated but remain unchanged
Я также убедился, что такое же поведение происходит, если я заменяю макрос VERSION и напрямую использую число. Если я только изменяю число, я получаю тот же результат, что и необходимость сделать «Чистое решение» для правильного построения решения.
Наконец, если я добавлю в код строку фиктивного кода, такую как:
int i = 7; // i is not used in the function
сборка будет работать правильно в следующий раз. В этом случае после перекомпиляции исходного файла мы видим следующее:
1> Generating code
1> 2 of 168 functions ( 1.2%) were compiled, the rest were copied from previous compilation.
1> 0 functions were new in current compilation
1> 0 functions had inline decision re-evaluated but remain unchanged
Дальнейшие компиляции не будут работать правильно, если что-то не меняется, например удаление
int i = 7;
В этом случае он будет работать в следующий раз.
Мысли