我可以在不使用命令行的情况下更改gcc默认选项吗?

我可以在不使用命令行的情况下更改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) 没有任何改进。

我被这场灾难折磨着。 简而言之,默认选项会误导configure,使其无法检测标准包含文件,因为某些标题包含以下代码:

#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

    这一切都归功于他。概述:

  • 识别作为编译器调用的二进制文件
  • 重命名它们
  • 在它们的位置上,创建在“-O”前面的shell脚本
  • 创建一个gcc配置文件来安抚gcc配置
  • 出现所有笨拙的包
    使用
    /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