Clion,cMake和POCO

时间:2015-05-08 02:06:26

标签: cmake poco-libraries

这里有c ++和cmake的新人。我决定测试cLion和cMake。我试图为命令行编写一个简单的电子邮件客户端。其他消息来源告诉我,实现POP3和SMTP功能的最佳方法是使用POCO。不幸的是,cMake给了我麻烦。 CLion附带的版本是3.2,但我的机器运行的版本是2.8。

~$ cmake --version
cmake version 2.8.12.2

第一个问题。我认为我可以通过安装POCO并做同样的事情来绕过这个,我也用于openssl,我也必须下载。

cMakeList.txt:

cmake_minimum_required(VERSION 3.0)
project(Email_Reader)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

#included paths for openssl and POCO. 

INCLUDE_DIRECTORIES("/usr/include/openssl")
INCLUDE_DIRECTORIES("/usr/local/include/Poco/Net")

set(SOURCE_FILES main.cpp)
add_executable(Email_Reader ${SOURCE_FILES}) 

POCO的文档告诉我,我需要至少3.0才能工作,但我觉得我的机器上有两个不同的cMake。请帮忙

2 个答案:

答案 0 :(得分:9)

您可以从http://www.cmake.org/download/

获取最新的CMake版本

对于Linux,它是这个档案:http://www.cmake.org/files/v3.2/cmake-3.2.2.tar.gz

使用它的一种简单方法是将提取的文件放在/opt/cmake/cmake-3.2中,然后创建以下别名(例如在~/.bash_aliases中:

alias ccmake3='/opt/cmake/cmake-3.2/bin/ccmake'
alias cmake3='/opt/cmake/cmake-3.2/bin/cmake'
alias cmake3-gui='/opt/cmake/cmake-3.2/bin/cmake-gui'
alias cpack3='/opt/cmake/cmake-3.2/bin/cpack'
alias ctest3='/opt/cmake/cmake-3.2/bin/ctest'

然后,确保您已正确构建并安装了POCO。 Getting Started页面包含您执行此操作所需的所有信息。但是,基本上,您应该获取源from here并将它们提取出来:

wget http://pocoproject.org/releases/poco-1.6.0/poco-1.6.0.tar.gz
tar xvfz poco-1.6.0.tar.gz
cd poco-1.6.0
mkdir -p cmake_build cmake_install/debug cmake_install/release
cd cmake_build
cmake3-gui ..

在CMake 3 GUI中,按Configure。在新窗口中,保留默认选项Unix Makefiles,然后点击Finish。应出现一条错误消息(没问题),点击Ok

要构建Debug版本,请设置以下内容:

CMAKE_BUILD_TYPE     : Debug
CMAKE_INSTALL_PREFIX : the absolute path to "cmake_install/debug"

为了让您快速开始使用POCO, unckeck 所有选项,除了以下内容之外,必须启用

ENABLE_JSON
ENABLE_NET
ENABLE_UTIL
ENABLE_XML
POCO_STATIC

(如果您需要,可以考虑其他选项......)

退出GUI,然后构建/安装POCO:

make clean
make -j8
make install

现在,POCO应该安装在cmake_install/debug中。要构建/安装其他版本,只需执行相同的过程,但将Debug中的CMAKE_BUILD_TYPE替换为ReleaseRelWithDebInfoMinSizeRel(cf. {{ 3}})(另外,你必须更改安装目录)

最后,您可以在C ++项目中使用POCO。

例如,您的CMakeLists.txt应如下所示:

cmake_minimum_required(VERSION 3.0)

project(Email_Reader)

# define the project
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)
add_executable(Email_Reader ${SOURCE_FILES}) 

# set the POCO paths and libs
set(POCO_PREFIX      "/path/to/cmake_install/debug") # the directory containing "include" and "lib"
set(POCO_INCLUDE_DIR "${POCO_PREFIX}/include")
set(POCO_LIB_DIR     "${POCO_PREFIX}/lib")
set(POCO_LIBS        "${POCO_LIB_DIR}/libPocoNetd.a"
                     "${POCO_LIB_DIR}/libPocoUtild.a"
                     "${POCO_LIB_DIR}/libPocoJSONd.a"
                     "${POCO_LIB_DIR}/libPocoXMLd.a"
                     "${POCO_LIB_DIR}/libPocoFoundationd.a"
                     "pthread")

# set the include path for the app
target_include_directories(Email_Reader PRIVATE "${POCO_INCLUDE_DIR}")
# link the app against POCO
target_link_libraries(Email_Reader "${POCO_LIBS}")

答案 1 :(得分:2)

我使用Poco的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.10.0)
project(MyProject VERSION 0.1.0)


find_package(Poco REQUIRED COMPONENTS Foundation Net Zip )

add_executable(my_exe main.cpp)


target_link_libraries(my_exe PUBLIC Poco::Foundation Poco::Zip Poco::Net)

此配置会自动添加所需的包含目录和库。 Foundation组件是必需的,似乎它提供了include目录。

请勿将Poco添加到target_link_libraries,然后链接程序将查找“ Poco”库。