Yanıtlar:
-Q --help=target
Seçenekleri kullanabilirsiniz :
gcc -march=native -Q --help=target ...
-v
Seçeneği de yarayabilir.
Buradaki--help
seçenekle ilgili belgeleri görebilirsiniz .
-v
parçası olsa da seçenekle görüntülüyor cc1
...
-march=native
ve sadece aşağıdaki her yerde çalışır: gcc -Q --help=target
.
Komut satırı bayraklarını görmek için şunu kullanın:
gcc -march=native -E -v - </dev/null 2>&1 | grep cc1
Derleyici / ön derleyici tanımlarının belirli parametreler tarafından ayarlandığını görmek istiyorsanız, bunu yapın:
echo | gcc -dM -E - -march=native
native
gerçekten neye eşit olduğunu listelemek için kabul edilen kadar çok oyu hak ediyor .
Olmalı ( -###
buna benzer -v
):
echo | gcc -### -E - -march=native
Gcc için "gerçek" yerel bayrakları göstermek için.
Bir komutla daha "açık" görünmelerini sağlayabilirsiniz:
gcc -### -E - -march=native 2>&1 | sed -r '/cc1/!d;s/(")|(^.* - )//g'
ve -mno- * ile bayraklardan kurtulabilirsiniz:
gcc -### -E - -march=native 2>&1 | sed -r '/cc1/!d;s/(")|(^.* - )|( -mno-[^\ ]+)//g'
Yerel olmayan bir çapraz derlemeyi nasıl kuracağınızı öğrenmek istiyorsanız, bunu yararlı buldum:
Hedef makinede,
% gcc -march=native -Q --help=target | grep march
-march= core-avx-i
Sonra bunu yapı makinesinde kullanın:
% gcc -march=core-avx-i ...
echo | gcc-6 -dM -E - -march=sandybridge | grep AVX #define __AVX__ 1
ama önbellek boyutları yok gibi görünüyor.
İki sentimi bu soruya atacağım ve elias'ın cevabının biraz daha ayrıntılı bir uzantısını önereceğim. Gcc 4.6 itibariyle, gcc -march=native -v -E - < /dev/null
gereksiz -mno-*
bayraklar şeklinde artan miktarda spam yayar . Aşağıdakiler bunları kesecektir:
gcc -march=native -v -E - < /dev/null 2>&1 | grep cc1 | perl -pe 's/ -mno-\S+//g; s/^.* - //g;'
Ancak, bunun sadece iki farklı CPU'da (Intel Core2 ve AMD Phenom) doğruluğunu doğruladım, bu yüzden bu -mno-*
bayrakların hepsinin güvenli bir şekilde çıkarılabileceğinden emin olmak için aşağıdaki komut dosyasını çalıştırmanızı da öneriyorum .
#!/bin/bash
gcc_cmd="gcc"
# Optionally supply path to gcc as first argument
if (($#)); then
gcc_cmd="$1"
fi
with_mno=$(
"${gcc_cmd}" -march=native -mtune=native -v -E - < /dev/null 2>&1 |
grep cc1 |
perl -pe 's/^.* - //g;'
)
without_mno=$(echo "${with_mno}" | perl -pe 's/ -mno-\S+//g;')
"${gcc_cmd}" ${with_mno} -dM -E - < /dev/null > /tmp/gcctest.a.$$
"${gcc_cmd}" ${without_mno} -dM -E - < /dev/null > /tmp/gcctest.b.$$
if diff -u /tmp/gcctest.{a,b}.$$; then
echo "Safe to strip -mno-* options."
else
echo
echo "WARNING! Some -mno-* options are needed!"
exit 1
fi
rm /tmp/gcctest.{a,b}.$$
Alıntı yapılan bazı parametreler - ve özel karakter içermeyen parametreler arasında gcc -march=native -v -E - < /dev/null
ve gcc -march=native -### -E - < /dev/null
dışında bir fark bulamadım , bu nedenle hangi koşullar altında gerçek bir fark yarattığından emin değilim.
Son olarak, --march=native
gcc 4.2'de tanıtıldığını, bundan önce sadece tanınmayan bir argüman olduğunu unutmayın.
--param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512