• Increase font size
  • Default font size
  • Decrease font size

C++/BOOST przez CMAKE wewnątrz WINDOWS z REGEX

Zbudowanie programu z wykorzystaniem biblioteki boost w przypadku tworzenia oprogramowania na platformie Linux jest sprawą trywialną. Problemy pojawiają się jednak jeśli prowadzimy rozwój oprogramowania w środowisku Windows. Poniżej przedstawiono przepis, receptę na to w jaki sposób zbudować program w języku C++ z wykorzystaniem w miarę nowoczesnych narzędzi automatyzujących proces budowania.

Na początek krótki program który będziemy chcieli zbudować:

Program umieszczamy w plku main.cpp

#include <iostream>
#include <fstream>
#include <boost/regex.hpp>

using namespace std;
int main()
{
    string sQueryFile( "sffrcdata.h");
    ifstream input( sQueryFile.c_str() );
    string str;     //zmienna do odczytu linii z pliku (plik czytany jest linia po linii)
    boost::cmatch what;
    boost::regex mulitestRe1("#include\\s*(<|\")(\\w*)(>|\").*");
while( getline( input, str ) ) {
if ( regex_match(str.c_str(),what,mulitestRe1) )
                       cout <<  what[2] << endl ;
}
}

Program jest którki. Do kompletu potrzebny jest jeszcze przepis. Najlepiej przepis zapisać w formacie narzędzia CMake. CMake to takie cudo, które w oparciu o dany przepis jest w stanie wyszykać w systemie biblioteki połączyć wszystko razem i wygenerować odpowiednie pliki dla kompilatora, któego też sobie znajdzie i potem wystarczy już tylko to co wygeneruje CMake zbudować.

Przepis dla CMake umieszaczmy w pliku CMakeLists.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR )
project( formatparser )
SET( Boost_USE_STATIC_LIBS ON )
FIND_PACKAGE( Boost 1.50 COMPONENTS regex REQUIRED )
#link_libraries(
#    libboost_regex-mgw44-mt-1_50.a
#)
MESSAGE(STATUS  "Boost information:")
MESSAGE(STATUS  "  Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
MESSAGE(STATUS  "  Boost_LIBRARY_DIRS: ${Boost_LIBRARY_DIRS}")
MESSAGE(STATUS  "  Boost_LIBRARIES: ${Boost_LIBRARIES}")
include_directories( ${Boost_INCLUDE_DIR} "share" )
link_directories( ${Boost_LIBRARY_DIRS} )
add_definitions( 
  -D_CONSOLE
  -D_DEBUG
)
set(SOURCES_HPARSER
   main.cpp
   )
add_executable( headerparser ${SOURCES_HPARSER} )

Do zbudowania tych plików potrzebne będą następujące składniki:

CMAKE - ten program pobieramy ze strony cmake.org

BOOST - ten zbiór bibliotek pobieramy ze strony boost.org

GCC - ja używam gcc ze środowiska qt creator które wspiera pliki Cmake jako pliki projektowe. W środku paczki jest kompilator mingw - narzędzie to pobieramy ze strony - http://qt.nokia.com/products/developer-tools/

Instalujemy CMAKE, Instalujemy boost - ( patrz artykuł o instalacji boost ) - w skrócie ( bootstrap.bat, .\b2 --prefix="c:\boost" install ), Instalujemy QT Creator/Mingw.

Ustawiamy zmienne środowiskowe BOOST, BOOST_ROOT, BOOST_LIB w środowisku WINDOWS. (Inaczej CMAKE nie znajdzie naszych bibliotek).

I otwieramy plik CMakeLists.txt jako plik projektowy w środiwsku QT Creator. Jeśli ktoś chce prowadzić debugowanie w środowisku qt to w trakcie wywołania cmake w środowisku QT Creator należy podać jako argument -DCMAKE_BUILD_TYPE=Debug. Jeśli się o tym zapomni, a mimo wszystko chce się budować wersję debugową - trzeba usunąć katalog qtcreator-build z plikami makefile i puścić CMAKE ponownie.

A ha - jeszcze jedno. Wyrażenia regularne. Wyrażenia regularne buduję za każdym razem od początku. Używam do tego z reguły istniejących narzędzi. Np. http://gskinner.com/RegExr/ - w środkowym okienku wrzucam tekst który poddam parsowaniu, a w górnej linii towrzę z elementów wyrażenie regularne. Zasadniczo najwięcej potem z tym zabawy w trakcie tworzenia programu.

A potem pozostaje już tylko przyjemność z używania biblioteki BOOST ...

 

 

 

 

 

Naszą witrynę przegląda teraz 19 gości