Re: cpp: How to compute dependencies of a header file

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

 



Hi again,

Thanks a lot for your answer.

Your response surprised me, and you are right. It appears that I
over-simplified my problem for this mailing-list, and removed the
important bit : the fact that I am using -Werror.

Now, if you run "g++ -MM -MG -Werror a.h", you will get:
a.h:1:9: error: #pragma once in main file

Since I am not willing to change the compilation flags that my users
provide, I am just adding a -Wno-error flag at the end, which seems to
work fine.

Thanks again for the help,
-- 
Remi

2011/4/8 Axel Freyn <axel-freyn@xxxxxx>:
> Hi Rémi
> On Fri, Apr 08, 2011 at 02:10:32PM +0200, Rémi Delmas wrote:
>> Hello,
>>
>> I need to compute the file dependencies for C++ source and header
>> files. Using the -MM option of gcc, here is how I proceed today:
>>
>> For example, if I need to get the dependencies for main.cpp and
>> main.hpp, I would execute :
>>
>>   >g++ -x c++ -MM -Iincludepath main.cpp main.hpp
>>   main.o: main.cpp main.hpp includepath/include2.hpp
>>   main.o: main.hpp includepath/include2.hpp
>>
>> I then parse the output to get my result with minimal effort (I ignore
>> the .o file, and the remainder of the line is simply the original
>> source file followed by the list of its dependencies).
>>
>> My problem is that the -MM option of gcc is not meant to be used with
>> header files, and seems to choke on header-only pragmas such as
>> "#pragma once". I have been looking at an option to ignore pragmas,
>> with no success.
>>
>> Could anyone either provide me with a way to ignore unwanted pragmas,
>> or else with a idea on how to achieve the desired result?
>>
>> Thanks a lot in advance. CC'ing me in the reply would be very much
>> appreciated. Since this is the first time I post on that list, please
>> redirect me to a more appropriate list if needed.
>
> For me, this works as expected. With the two files:
> test.cc:
> #include "a.h"
> #include "b.h"
> a.h:
> #pragma once
> #include "c.h"
>
> I obtain (this is g++ version 4.1.2):
>  > g++ -MM -MG test.cc
> test.o: test.cc a.h c.h b.h
>  > g++ -MM -MG a.h
> a.o: a.h c.h
>
> which seems to be fine. The "-MG" just assumes missing files to be
> auto-generated (here: b.h and c.h)
>
> Did I misunderstand your problem?
>
> Another solution to your problem might be the use of "makedepend", which
> has nothing to do with gcc (at least to my knowledge), but which is
> designed to generate such header-dependencies in a most-efficient way
> (especially if you have really large projects...)
>
> Axel
>



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux