Отдельные единицы перевода могут быть скомпилированы с отдельными флагами оптимизации, что, как правило, не является проблемой. Оптимизация во время компиляции обычно влияет только на видимый код в пределах одного TU.
Исключением из этого правила является флаг -fwhole-program
, который указывает, что ваш исходный код составляет всю программу и допускает более агрессивную оптимизацию:
gcc -o prog *.c -O3 -fwhole-program -s
Тем не менее, GCC недавно представил еще один уровень оптимизации во время link ; чтобы использовать это, скомпилируйте все с -flto
(GCC 4.6). Однако это также не зависит от флагов оптимизации для каждого TU:
gcc -c module1.c -flto -O2
gcc -c module2.c -flto -O3 -fno-strict-aliasing
gcc -c module3.c -flto -O0
gcc -c module4.c -O1
gcc -o prog module*.o -flto -s
Наконец, вы также можете указать независимую опцию -O*
на этапе соединения, но я не знаю, имеет ли это какое-либо значение.
Также обратите внимание, что предварительно скомпилированные заголовочные файлы не могут быть независимо optmizied; PCH имеет право только в том случае, если он был скомпилирован с теми же настройками оптимизации, что и TU.