From: Manu <ma...@wa...> - 2003-08-14 23:10:27
|
Greg Chicares wrote: > > manubee wrote: > > > > To generate dependencies from a resource file, > > the following works as expected: > > > > cpp -E -MM rsrc.rc -MT ../objdebug/rsrc.o -MP -I../include -I../winui/include -DDEBUG -DDEBUGF -D_WIN32_IE=0x0400 > > > ../src/_deps/rsrc.Po > > But using $(CC) -E or $(CPP) doesn't: > > I usually set $(CPP) explicitly in my makefiles, like > CPP = cpp > but if you rely on make's builtin rules I think you get > CPP = $(CC) -E > which will give the problem you observe. That's correct. CPP = cpp doesn't work under Wine. CPP = $(CC) -E doesn't work with rc files. (Under Windows) > > gcc -E -MM rsrc.rc -MT ../objdebug/rsrc.o -MP -I../include -I../winui/include -DDEBUG -DDEBUGF -D_WIN32_IE=0x0400 > > > ../src/_deps/rsrc.Po > > gcc: rsrc.rc: linker input file unused because linking not done > > gcc does not recognize the '.rc' suffix, so it sees the .rc file as > "An object file to be fed straight into linking." Ok, I see. Well, I tend to think that rc files should be recognized under Windows, particularly if we stop after the preprocessing stage. > http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Overall-Options.html > Try telling it to treat the source as though it were C: > > gcc -x c -E -MM rsrc.rc [...] :) It works fine. That's a very good trick. But there's another problem. Such $(MAKEDEPEND) macro works only for C files. For example: gcc -x c -E -MM main.cpp -MT ../objdebug/main.o -MP -I../include -I../winui/include -DDEBUG -DDEBUGF -D_WIN32_IE=0x0400 > ../src/_deps/main.Po main.cpp:35:47: warning: new: No such file or directory In main.cpp, line 35: #include <new> > > The problem with "cpp -E" is that makefiles are not portable. > > For example, it is required to patch the > > makefiles to build under Wine. > > Does wine not have a C preprocessor called 'cpp'? I don't think so, it is more likely 'winecpp'. For example, my makefiles use the following to build under Wine: (submitted by Wine friends :) ifndef WINE CC = gcc CXX = g++ RC = windres else CC = winegcc CXX = wineg++ RC = wrc endif I never built the sources myself under Wine, but maybe overwriting $(CPP) the same way would work. Thanks for the good information, Manu. |