Ссылаясь на ваш последний вопрос: Источники gcc 4.6.1 (gcc/gcc.c
) содержат следующий комментарий к %>
:
%>S Similar to "%<S", but keep it in the GCC command line.
Для полноты после комментария к %<
сформируйте тот же файл:
%<S remove all occurrences of -S from the command line.
Note - this command is position dependent. % commands in the
spec string before this one will see -S, % commands in the
spec string after this one will not.
Чтобы ответить на первый вопрос вкратце: да, но ....
... единственное общее решение, которое я нашел, имеет существенный недостаток, заключающийся в том, что опция -march
будет игнорироваться, поэтому каждая сборка выполняется так, как если бы был указан -march=native
. Во всяком случае, есть обходной путь к этому.
1 Раствор (без обходного пути)
Создайте spec-файл с именем скажем specs.nativealways
, содержащий:
*cc1_cpu:
%<march=* -march=native %>march=native %:local_cpu_detect(arch) %{!mtune=*:%>mtune=native %:local_cpu_detect(tune)} %{mtune=native:%>mtune=native %:local_cpu_detect(tune)}
При использовании spec-файла (например, путем вызова gcc
с параметром -specs=specs.nativealways
) сборка будет выполняться так, как если бы был указан -march=native
(с указанным недостатком, что любое вхождение параметра -march=<arch>
будет были просто проигнорированы).
2 Обходной путь
Чтобы по-прежнему переопределять вновь настроенное поведение по умолчанию, можно использовать модифицированную версию описанного выше файла спецификации, вводя новую опцию под названием -myarch
с использованием того же синтаксиса, что и -march
(за исключением -myarch=native
, который не будет работать, что не учитывается, так как native
теперь является значением по умолчанию).
Модифицированный spec-файл выглядит так:
*cc1_cpu:
%<march=* %{myarch=*:%<myarch* -march=%* ; :-march=native %>march=native %:local_cpu_detect(arch) %{!mtune=*:%>mtune=native %:local_cpu_detect(tune)}} %{mtune=native:%>mtune=native %:local_cpu_detect(tune)}
PS: это было протестировано с gcc 4.6.2 в Linux, но должно работать на MinGW.