[cfe-dev] Getting clang header search path

Larry Evans cppljevans at suddenlink.net
Sat Aug 16 10:44:23 PDT 2014


On 08/16/2014 06:03 AM, Edward Diener wrote:
> On 8/15/2014 11:26 PM, Nikola Smiljanic wrote:
>> Yeah this is one of those "known problems". MinGW never had a proper
>> toolchain implemented, I think Ruben was working on this. Include paths
>> come from hardcoded versions listed in InitHeaderSearch.cpp.
> 
> It looks like the C++ standard library location is different between the
> MingW and MingW64 implementations.
> 
> In MingW the locations are:
> 
> C:\mingw\lib\gcc\mingw32\*gcc_version as n.n.n*\include\c++
> C:\mingw\mingw32\lib\gcc\mingw32\*gcc_version as n.n.n*\include\c++
> 
> In MingW64 the locations is:
> 
> C:\mingw\*gcc_version as triplex as in i686-w64-mingw32*\include\c++
> 
> There is probably some way of telling the clang CMake based build how to
> find the C++ standard library in the clang/llvm CMake options but I do
> not know what it is. 

Couldn't the CMake *scripts* be modified to just run g++ -v?  Then
parse output looking for the C++ standard library headers?  Although the
output with g++ -v shows all headers, you could run 1st with -nostdinc++
and then without that flag and compare the two outputs, as shown here:

http://lists.cs.uiuc.edu/pipermail/cfe-dev/2014-August/038611.html

Now, the example in that post just showed:

  usr/include/c++/v1

but that may be because the -stdlib=libc++ was also passed.  OTOH,
if the flag is left off, the the difference is:

diff not.out yes.out
0a1,3
>
/usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../../include/c++/4.9.0
>
/usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../../include/c++/4.9.0/x86_64-unknown-linux-gnu
>
/usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../../include/c++/4.9.0/backward

> The closes things I see are
> COMPILER_RT_TEST_TARGET_TRIPLE, described as "Default triple for
> cross-compiled executables" and LLVM_DEFAULT_TARGET_TRIPLE described as
> "Default target for which LLVM will generate code". But neither of these
> triple sequences show up when I view the clang header search.
> 
> It appears that clang only looks for the headers following the MingW
> *gcc_version as n.n.n* sequence when looking in the gcc location for its
> C++ standard library.
> 
> I will switch from MingW64 to MingW for gcc on Windows when using clang,
> but it sure would be nice if clang understood the MingW64 location also.
> Also the latest clang needs to be updated for gcc versions above 4.8.2
> such as 4.8.3, 4.9.0, and 4.9.1.
> 
[snip]





More information about the cfe-dev mailing list