我可以在不使用命令行的情况下更改gcc默认选项吗?
我被这场灾难折磨着。 简而言之,默认选项会误导configure,使其无法检测标准包含文件,因为某些标题包含以下代码:我可以在不使用命令行的情况下更改gcc默认选项吗?,gcc,configure,gentoo,Gcc,Configure,Gentoo,我被这场灾难折磨着。 简而言之,默认选项会误导configure,使其无法检测标准包含文件,因为某些标题包含以下代码: #if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 # if !defined __OPTIMIZE__ || __OPTIMIZE__ <= 0 # warning _FORTIFY_SOURCE requires compiling with optimization (-O) 没有任何改进。
#if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0
# if !defined __OPTIMIZE__ || __OPTIMIZE__ <= 0
# warning _FORTIFY_SOURCE requires compiling with optimization (-O)
没有任何改进。没有这样的环境变量<
make.conf
中的code>CFLAGS不起作用,因为构建系统通常执行以下操作:
$(CC) $(CFLAGS) $(MY_HARDCODED_CFLAGS)
从而覆盖您的标志
但是要损坏传递给gcc的任何参数,可以使用以下变通方法
/usr/local/bin/
gcc
或“/usr/bin/”+basename(argv[0])
(注意无限递归)gcc
,cc
,x86\u 64-pc-linux-gnu-gcc
/etc/portage/bashrc
中放入一组这样的行:
the_dir="/usr/local/bin/THE_DIR"
if [[ "${PATH}" != *"${the_dir}"* ]] ; then
export PATH="${the_dir}:${PATH}"
fi
另外,为了避免将来可能出现的问题,不要忘了在某个地方记下这个变化。(无论如何,任何解决方法都应该这样做。)仅记录我实际用于解决问题的命令
mv /usr/bin/i686-pc-linux-gnu-gcc /usr/bin/i686-pc-linux-gnu-gcc.OLD
cat >/usr/bin/i686-pc-linux-gnu-gcc
/usr/bin/i686-pc-linux-gnu-gcc.OLD -O "$@"
ctrl+D
ctrl+D
这一切都归功于他。概述:
使用
/etc/portage/make.conf
设置所需的CFLAGS
和/或cxflags
终于,一年后我开始重新编译gcc(4.6->6.2)!你的建议让人大开眼界,但configure没有采纳你建议的温和替代方案。我不得不重命名/usr/bin/i686-pc-linux-gnu-g++本身(和朋友们)。
mv /usr/bin/i686-pc-linux-gnu-gcc /usr/bin/i686-pc-linux-gnu-gcc.OLD
cat >/usr/bin/i686-pc-linux-gnu-gcc
/usr/bin/i686-pc-linux-gnu-gcc.OLD -O "$@"
chmod +x /usr/bin/i686-pc-linux-gnu-gcc
cp /usr/i686-pc-linux-gnu/gcc-bin/4.6.3/i686-pc-linux-gnu-gcc /usr/i686-pc-linux-gnu/gcc-bin/4.6.3/i686-pc-linux-gnuu-gcc
mv /usr/bin/i686-pc-linux-gnu-g++ /usr/bin/i686-pc-linux-gnuu-g++
cat >/usr/bin/i686-pc-linux-gnu-g++
/usr/bin/i686-pc-linux-gnuu-g++ -O "$@"
chmod +x /usr/bin/i686-pc-linux-gnu-g++
cp /usr/i686-pc-linux-gnu/gcc-bin/4.6.3/i686-pc-linux-gnu-g++ /usr/i686-pc-linux-gnu/gcc-bin/4.6.3/i686-pc-linux-gnuu-g++
cp /etc/env.d/gcc/i686-pc-linux-gnu-4.6.3.O /etc/env.d/gcc/i686-pc-linux-gnuu-4.6.3