This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

About behavior of -save-temps=obj option on GCC 4.5


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]