[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: how to configure gcc



>> On Thu, 30 Sep 2010 09:20:36 +0530, 
>> Anand Sivaram <aspnair@gmail.com> said:

AS> On Thu, Sep 30, 2010 at 09:12, Boyd Stephen Smith Jr. wrote:
    B> On Wednesday 29 September 2010 15:18:46 abdelkader belahcene wrote:
       A> yes but normally gcc should be configured, where is the config file,

    B> It's in the same place as the config file for ls, cp, and rm.  (There
    B> isn't one.)

    This is where the BSD version of make has an advantage over GNU make.
    It checks for system-wide defaults in the file /etc/make.conf:

      me% uname -sr
      FreeBSD 6.2-RELEASE

      me% cat /etc/make.conf
      CPUTYPE?=pentium4
      CFLAGS= -O2 -pipe -funroll-loops
      COPTFLAGS= -O -pipe

AS> I think using an alias 'gcc -lm' is not a good idea.  It may be looking
AS> easier for this particular C file, but '-lm' would be linked always for
AS> even in the case of hello_world.c which is really unnecessary.

    The additional linking won't do much besides take an extra millisecond
    of time and add around 25 bytes to your binary; that's what I saw when
    comparing on a Deadrat Enterprise system.  Build the executable both
    ways, run "nm" and chop the first 10 characters to see for yourself.
    The results should be identical.

    You're right about the alias -- it works fine right up to the part where
    someone changes their login shell or alias setup.  It's safer to use a
    script as a front-end, so you can check for environment variables in a
    global or user-specific config file:

      #!/bin/sh
      # front-end for make with preset preferences.
      export PATH=/usr/local/bin:/bin:/sbin:/usr/sbin:/usr/bin
      cbase='make.conf'
      for cfg in /etc/$cbase $HOME/etc/$cbase; do
          test -f "$cfg" && . $cfg
      done
      exec /usr/bin/make ${1+"$@"}   # Use full path just to be safe...
      exit 1

    Under Linux, the config file looks like this:

      me% cat $HOME/etc/make.conf
      # Default values for make.
      export CC="gcc"
      export CFLAGS="-O2 -pipe -funroll-loops"
      export COPTFLAGS="-O -pipe"

    Comparison:

      me% cat Makefile
      hello: hello.o
      hello.o: hello.c

      me% cat hello.c
      #include <stdio.h>
      #include <stdlib.h>
      main()
      {
          printf("hello, world\n");
      #ifdef unix
          printf("unix defined\n");
      #endif
          exit(0);
      }

      me% make
      cc -c -o hello.o hello.c
      cc hello.o -o hello

      me% ./make   # using the frontend script
      gcc -O2 -pipe -funroll-loops -c -o hello.o hello.c
      gcc hello.o -o hello
      
-- 
Karl Vogel                      I don't speak for the USAF or my company

Beauty is only a light switch away.
                    --Perkins Library, Duke University, Durham, North Carolina


Reply to: