Precompiled headers with GCC

后端 未结 6 1944
自闭症患者
自闭症患者 2020-11-28 18:24

Anyone had any success getting precompiled headers working with GCC? I have had no luck in my attempts and I haven\'t seen many good examples for how to set it up. I\'ve t

6条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-28 19:07

    I have definitely had success. First, I used the following code:

    
    #include 
    #include 
    
    using namespace std;
    using namespace boost::xpressive;
    
    //A simple regex test
    int main()
    {
        std::string hello( "hello world!" );
    
        sregex rex = sregex::compile( "(\\w+) (\\w+)!" );
        smatch what;
    
        if( regex_match( hello, what, rex ) )
        {
            std::cout << what[0] << '\n'; // whole match
            std::cout << what[1] << '\n'; // first capture
            std::cout << what[2] << '\n'; // second capture
        }
        return 0;
    }
    

    This was just a hello world from Boost Xpressive (see below for link). First, I compiled with the -H option in gcc. It showed an enormous list of headers that it used. Then, I took a look at the compile flags my IDE (code::blocks) was producing and saw something like this:

    g++ -Wall -fexceptions -g -c main.cpp -o obj/Debug/main.o

    So I wrote a command to compile the Xpressive.hpp file with the exact same flags:

    sudo g++ -Wall -fexceptions -g /usr/local/include/boost/xpressive/xpressive.hpp

    I compiled the original code again with the -H and got this output:

    g++ -Wall -fexceptions -H  -g     -c main.cpp -o obj/Debug/main.o
    ! /usr/local/include/boost/xpressive/xpressive.hpp.gch
    main.cpp
    . /usr/include/c++/4.4/iostream
    .. /usr/include/c++/4.4/x86_64-linux-gnu/bits/c++config.h
    .. /usr/include/c++/4.4/ostream
    .. /usr/include/c++/4.4/istream
    main.cpp
    

    The ! means that the compiler was able to use the precompiled header. An x means it was not able to use it. Using the appropriate compiler flags is crucial. I took off the -H and ran some speed tests. The precompiled header had an improvement from 14 seconds to 11 seconds. Not bad but not great.

    Note: Here's the link to the example: http://www.boost.org/doc/libs/1_43_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.examples I couldn't get it to work in the post.

    BTW: I'm using the following g++

    g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3

提交回复
热议问题