Clion、cMake 和 POCO
Clion, cMake and POCO
我是 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 才能工作,但我觉得我的机器上有 2 个不同的 cMake。你能帮帮我吗?
您可以从以下位置获取最新的 CMake 版本:http://www.cmake.org/download/
对于 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 page has all the information you need for doing that. But, basically, you should get the sources 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
。在新的 window 中,保留默认选项 Unix Makefiles
并单击 Finish
。应出现一条错误消息(这很好),单击 Ok
。
要构建 Debug
版本,请设置以下内容:
CMAKE_BUILD_TYPE : Debug
CMAKE_INSTALL_PREFIX : the absolute path to "cmake_install/debug"
为了让您快速开始使用 POCO,取消勾选所有选项,但以下选项除外,它们必须启用:
ENABLE_JSON
ENABLE_NET
ENABLE_UTIL
ENABLE_XML
POCO_STATIC
(以后有需要可以考虑其他选项...)
退出GUI,然后build/install POCO:
make clean
make -j8
make install
现在,POCO 应该安装在 cmake_install/debug
中。要build/install其他版本,只需执行相同的步骤,但将CMAKE_BUILD_TYPE
中的Debug
替换为Release
、RelWithDebInfo
或MinSizeRel
(cf. CMake's doc)(另外,您还必须更改安装目录)
终于可以在 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}")
我的 CMakeLists.txt
使用 Poco 是这样的:
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
组件是必需的,它似乎提供了包含目录。
不要将 Poco
添加到 target_link_libraries
,然后链接器将查找 'Poco' 库。
我是 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 才能工作,但我觉得我的机器上有 2 个不同的 cMake。你能帮帮我吗?
您可以从以下位置获取最新的 CMake 版本:http://www.cmake.org/download/
对于 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 page has all the information you need for doing that. But, basically, you should get the sources 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
。在新的 window 中,保留默认选项 Unix Makefiles
并单击 Finish
。应出现一条错误消息(这很好),单击 Ok
。
要构建 Debug
版本,请设置以下内容:
CMAKE_BUILD_TYPE : Debug
CMAKE_INSTALL_PREFIX : the absolute path to "cmake_install/debug"
为了让您快速开始使用 POCO,取消勾选所有选项,但以下选项除外,它们必须启用:
ENABLE_JSON
ENABLE_NET
ENABLE_UTIL
ENABLE_XML
POCO_STATIC
(以后有需要可以考虑其他选项...)
退出GUI,然后build/install POCO:
make clean
make -j8
make install
现在,POCO 应该安装在 cmake_install/debug
中。要build/install其他版本,只需执行相同的步骤,但将CMAKE_BUILD_TYPE
中的Debug
替换为Release
、RelWithDebInfo
或MinSizeRel
(cf. CMake's doc)(另外,您还必须更改安装目录)
终于可以在 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}")
我的 CMakeLists.txt
使用 Poco 是这样的:
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
组件是必需的,它似乎提供了包含目录。
不要将 Poco
添加到 target_link_libraries
,然后链接器将查找 'Poco' 库。