Poco 라이브러리 설치하기
Linux
- 공식 사이트에서 최신 버전을 다운로드 한다.
- 압축을 풀고, 빌드한다.
- 아래는 64비트, static 라이브러리, 테스트와 샘플은 제외 하는 설정으로 빌드 한다
$ tar zxvf poco-1.7.8p2-all.tar.gz
$ cd poco-1.7.8p2-all/
$ export OSARCH_64BITS=1
$ ./configure --static --no-tests --no-samples
$ make
설정 정보는 아래 처럼 더 추가할 수 있다. ODBC는 제외하고, mysql 라이브러리를 사용하기 위해 path를 지정.
./configure --omit=Data/ODBC,Data/SQLite --prefix=/usr --cflags=-fPIC --cflags=-std=c++11 --static --shared --no-tests --no-samples
빌드가 끝나면 poco 디렉토리(위에서 압축을 푼)에 라이브러리가 만들어져 있다.
lib/Linux/x86_64
디버그 버전은 라이브러리 이름 뒤에 ‘d’가 붙고, 64비트 버전은 뒤에 ‘64’가 붙는다.
샘플 예제 - Makefile
sample.cpp
#include <iostream>
#include <Poco/RegularExpression.h>
int main() {
Poco::RegularExpression regexp("^[a-zA-Z]+");
std::string buf;
regexp.extract("ABC123", buf);
std::cout << buf << std::endl; //=> ABC
return 0;
}
Makefile
CXX=g++
CXXFLAGS=-I/mnt/e/linux/dev/c++/thirdparty/poco/Foundation/include
LDFLAGS=-L/mnt/e/linux/dev/c++/thirdparty/poco/lib/Linux/x86_64
LDLIBS=-lPocoFoundation64
all:sample
clean:
rm -rf sample
rm -rf *.o
샘플 예제 - clion
위와 같은 코드를 빌드한다고 가정한다.
기본 프로젝트를 만들면 cmake 파일의 내용은 아래와 같다.
cmake_minimum_required(VERSION 3.9)
project(hello_poco_clion)
set(CMAKE_CXX_STANDARD 17)
add_executable(hello_poco_clion main.cpp)
아래와 같이 변경한다
cmake_minimum_required(VERSION 3.9)
project(hello_poco_clion)
set(CMAKE_CXX_STANDARD 17)
set(POCO_ROOT $ENV{HOME}/dev/cpp/thirdparty/poco)
set(Poco_Foundation_INCLUDE_DIR ${POCO_ROOT}/Foundation/include)
set(Poco_LIBRARY_DIR ${POCO_ROOT}/lib/Linux/x86_64)
FIND_LIBRARY(Poco_LIBRARIES NAMES PocoFoundation PocoNet PATH_SUFFIXES ${Poco_LIBRARY_DIR})
include_directories(${Poco_Foundation_INCLUDE_DIR})
link_directories(${Poco_LIBRARY_DIR})
add_executable(hello_poco_clion main.cpp)
target_link_libraries( hello_poco_clion PocoFoundation64 )
샘플 예제 - CMake
$ mkdir PocoTest
$ cd PocoTest
$ touch HelloPoco.cc
HelloPoco.cc
#include "Poco/Thread.h"
#include "Poco/Runnable.h"
#include <iostream>
class HelloRunnable : public Poco::Runnable
{
virtual void run()
{
std::cout << "Hello, POCO!" << std::endl;
}
};
int
main(int argc, char** argv)
{
HelloRunnable runnable;
Poco::Thread thread;
thread.start(runnable);
thread.join();
return 0;
}
$ cd PocoTest
$ touch CMakeLists.txt
CMakeLists.txt
CMAKE_MINIMUM_REQUIRED (VERSION 2.8)
LIST (APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules)
FIND_PACKAGE (POCO)
IF (POCO_FOUND)
INCLUDE_DIRECTORIES (POCO_INCLUDE_DIRS)
ADD_EXECUTABLE (HelloPoco HelloPoco.cc)
TARGET_LINK_LIBRARIES (HelloPoco ${POCO_FOUNDATION})
ENDIF (POCO_FOUND)
$ mkdir CMakeModules
$ cd CMakeModules
$ touch FindPOCO.cmake
FindPOCO.cmake
FIND_PATH (POCO_INCLUDE_DIR Poco/Poco.h PATHS /usr/include)
FIND_LIBRARY (POCO_FOUNDATION PocoFoundation PATHS /usr/lib)
FIND_LIBRARY (POCO_NET_LIBRARY PocoNet PATHS /usr/lib)
FIND_LIBRARY (POCO_UTIL_LIBRARY PocoUtil PATHS /usr/lib)
FIND_LIBRARY (POCO_XML_LIBRARY PocoXML PATHS /usr/lib)
IF (POCO_INCLUDE_DIR AND POCO_FOUNDATION)
SET (POCO_FOUND TRUE)
MESSAGE ("POCO found.")
ELSE (POCO_INCLUDE_DIR AND POCO_FOUNDATION)
SET (POCO_FOUND FALSE)
MESSAGE ("POCO not found...")
ENDIF (POCO_INCLUDE_DIR AND POCO_FOUNDATION)
소스 트리는 아래와 같다
PocoTest
├ CMakeLists.txt
├ CMakeModules
│ └ FindPOCO.cmake
└ HelloPoco.cc
빌드 및 실행
$ cd PocoTest
$ mkdir build
$ cd build
$ cmake ..
$ make
$ ./HelloPoco
이 글은 2019-07-10에 작성되었습니다.