Hi all,
    (* I am weak in English, so pleas forgive my English mistake.)

  Please teach me about a behavior of -save-temps=obj option
on gcc 4.5. A behavior I found is whether bug or specification ?

[ summary ]
    compiling is failed when more than two source file are
    specified with both -save-temps=obj and -o options.

1) Environment
  -------------------------------------------------------
  [System]: Fedora release 12 (Constantine)
  [gcc version]:
    % /usr/local/bin/gcc -v
    Using built-in specs.
    COLLECT_GCC=/usr/local/bin/gcc
    
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.5.0/lto-wrapper
    Target: x86_64-unknown-linux-gnu
    Configured with: ../gcc-4.5-20100304-src/configure
--prefix=/usr/local --mandir=/usr/local/share/man
--infodir=/usr/local/share/info --enable-languages=c,c++ --disable-nls
    Thread model: posix
    gcc version 4.5.0 20100304 (experimental) (GCC)
  -------------------------------------------------------

2) Source files I used are bellow:
  [main.c]
  +------------------------------------------------------
  |extern int func(const char *);
  |int main () {
  |  func("hello world!\n");
  |}
  +------------------------------------------------------
  [func.c]
  +------------------------------------------------------
  |#include <stdio.h>
  |int func (const char *str) {
  |  return(fprintf(stdout, str));
  |}
  +------------------------------------------------------

3) Files/Directory structure is bellow:
    /tmp/test/hellow.c
             /func.c
             /obj_dir/

4) Test operations.
  I tryed bellow operations at /tmp/test directory.
  -------------------------------------------------------
  [[ operations being successful ]]
    % gcc main.c func.c
    % gcc -o obj_dir/hello main.c func.c
    % gcc -save-temps=cwd main.c func.c
    % gcc -save-temps=cwd -o obj_dir/hello main.c func.c
    % gcc -save-temps=obj main.c func.c

 [[ operations being error ]]
    % gcc -save-temps=obj -o hellow main.c func.c
    % gcc -save-temps=obj -o obj_dir/hellow main.c func.c

    // example error messages //
    obj_dir/hello.o: In function `func':
    func.c:(.text+0x0): multiple definition of `func'
    obj_dir/hello.o:func.c:(.text+0x0): first defined here
    /usr/lib/../lib64/crt1.o: In function `_start':
    (.text+0x20): undefined reference to `main'
    collect2: ld returned 1 exit status

    // more information//
    * in this error case, temporary files are nemed as
      'hello.i' and that content is from 'func.c', but
      contents of 'hello.s' is perhaps from 'main.c'.
  -------------------------------------------------------

I think that two understanding are possible.
  A) this behavior is a specification like '-o' option with
      using -c option.

      [ operation example ]
      % gcc -c -o obj_dir/hello.o main.c func.c
      gcc: cannot specify -o with -c, -S or -E with multiple files

  B) this behavior is a bug.
      [ reason ]
      In below case, temporary files are made in current
      directory. names of these files are based on 'source
      file'.

      % gcc -save-temps=cwd -o obj_dir/hello main.c func.c

      When -save-temps=cwd option is exchanged to
      -save-temps=obj, I expect to keep names of temporary
      files as from 'source file', and only a place to save
      temporary files are exchanged to object directory.

Because I don't understand that this behavior is whether
bug or specification, so I don't report this to bugzilla
yet.

I feel that function of -save-temps=obj option is great!
I would like to know how to use -save-temps=obj option.
So pleas teach me true behavior about -save-temps=obj.

Best regards,
Tadashi Koike

Reply via email to