3
有沒有辦法讓gcc忽略一個無效的選項,而不是用「unrecongized option」死掉?原因是我想使用僅適用於更高版本的gcc(-static-libstdC++)的選項,但它也應該在較早的編譯器上編譯。我可以檢查生成文件中的gcc版本,但它有點難看。gcc:忽略無法識別的選項
有沒有辦法讓gcc忽略一個無效的選項,而不是用「unrecongized option」死掉?原因是我想使用僅適用於更高版本的gcc(-static-libstdC++)的選項,但它也應該在較早的編譯器上編譯。我可以檢查生成文件中的gcc版本,但它有點難看。gcc:忽略無法識別的選項
沒有,但你可以如下設置基於gcc版本的標誌:
version=`gcc --version | head -1 | cut -d ' ' -f3`
if [ `echo -e "$version\n4.6.1" | sort -V -C; echo $?` == 0 ]; then
flags = -static-libstdc++;
fi
gcc $flags ...
(免責聲明:我不知道哪個版本首先採用靜態的libstdC++,4.6.1只是一個猜測)。
約翰
可以運行gcc,並檢查它是否接受標誌:
STATIC_LIBCPP_FLAG := $(shell if gcc -static-libstdc++ --version 2>&1 | grep -q 'unrecognized option'; then true; else echo -static-libstdc++; fi)
CFLAGS += $(STATIC_LIBCPP_FLAG)