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