How to include external library (boost) into CLion C++ project with CMake?(如何使用 CMake 将外部库 (boost) 包含到 CLion C++ 项目中?)
问题描述
我有以下 C++ 开发设置:
I have the following setup for C++ development:
OS X Yosemite
CLion 140.2310.6
(JetBrains 的跨平台 C/C++-IDE,使用CMake
作为构建系统)- 通过
brew install boost
安装boost
到/usr/local/Cellar/boost/
OS X Yosemite
CLion 140.2310.6
(a cross-plattform C/C++-IDE by JetBrains usingCMake
as build system)- installed
boost
viabrew install boost
into/usr/local/Cellar/boost/
现在,我的目标是设置一个简单的项目并包含 boost
库.我只定义了一个 test.cpp 文件,如下所示:
Now, my goal is to setup a simple project and include the boost
library. I defined just one test.cpp file that looks like this:
#include <iostream>
#include <boost>
using namespace std;
int test() {
cout << "Hello, World!" << endl;
return 0;
}
我的 CMakeLists.txt 文件如下所示:
My CMakeLists.txt file looks like this:
cmake_minimum_required(VERSION 2.8.4)
project(MyProject)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
include_directories("/usr/local/Cellar/boost/1.57.0/include/boost")
set(SOURCE_FILES main.cpp ./test.cpp)
add_executable(MyProject ${SOURCE_FILES})
当我构建项目时,出现以下错误:
When I build the project, I get the following error:
/Users/nburk/Documents/uni/master/master_thesis/MyProject/test.cpp:2:10:致命错误:找不到boost"文件
/Users/nburk/Documents/uni/master/master_thesis/MyProject/test.cpp:2:10: fatal error: 'boost' file not found
make[3]: *** [CMakeFiles/MyProject.dir/test.cpp.o] 错误 1make[2]: *** [CMakeFiles/MyProject.dir/all] 错误 2make[1]: *** [CMakeFiles/MyProject.dir/rule] 错误 2make: *** [MyProject] 错误 2
make[3]: *** [CMakeFiles/MyProject.dir/test.cpp.o] Error 1 make[2]: *** [CMakeFiles/MyProject.dir/all] Error 2 make[1]: *** [CMakeFiles/MyProject.dir/rule] Error 2 make: *** [MyProject] Error 2
我到处调整路径,还使用了add_library
和target_link_libraries
,但这些都没有成功构建项目.
I played around with adjusting paths here and there and also using add_library
and target_link_libraries
, none of which made the project build successfully.
有人能指出正确的方向,如何确保我可以将 boost
的功能包含到我的 CLion C++ 项目中?
Can someone point into the right direction how to make sure I can include boost
s functionality into my CLion C++ project?
更新:感谢@Waxo 的回答,我在 CMakeLists.txt 文件中使用了以下代码:
Update: Thanks to @Waxo's answer I used the following code in my CMakeLists.txt file which:
set(Boost_INCLUDE_DIR /usr/local/Cellar/boost/1.57.0)
set(Boost_LIBRARY_DIR /usr/local/Cellar/boost/1.57.0/lib)
find_package(Boost COMPONENTS system filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIR})
我现在解决了找不到文件-错误,但我得到以下信息:
I now got past the file not found-error, but instead I get the following:
/Applications/CLion 中的 CMake 错误EAP.app/Contents/bin/cmake/share/cmake-3.1/Modules/FindBoost.cmake:685(文件):
CMake Error at /Applications/CLion EAP.app/Contents/bin/cmake/share/cmake-3.1/Modules/FindBoost.cmake:685 (file):
无法读取文件 STRINGS 文件/usr/local/Cellar/boost/1.57.0/boost/version.hpp".
file STRINGS file "/usr/local/Cellar/boost/1.57.0/boost/version.hpp" cannot be read.
调用堆栈(最近调用优先):CMakeLists.txt:11(find_package)
Call Stack (most recent call first): CMakeLists.txt:11 (find_package)
任何想法我仍然缺少什么?FindBoost.cmake 中引用的行 (685) 是:file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")
Any ideas what I am still missing? The referred line (685) in FindBoost.cmake is:
file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")
推荐答案
在这个问题上花了一个下午,我自己解决了.这是一个相当愚蠢的错误,@Waxo 回答中的所有提示都非常有帮助.
After spending the whole afternoon on the issue, I solved it myself. It was a rather stupid mistake and all the hints in @Waxo's answer were really helpful.
我在 test.cpp 文件中编写了 #include <boost>
对我不起作用的原因,这显然是错误的.相反,您需要直接引用您实际想要包含的头文件,因此您应该编写例如#include
.
The reason why it wasn't working for me that I wrote #include <boost>
within my test.cpp-file, which apparently is just wrong. Instead, you need to refer directly to the header files that you actually want to include, so you should rather write e.g. #include <boost/thread.hpp>
.
毕竟,简短的语句序列应该足以成功(并且独立于平台)将 boost
包含到 CMake
项目中:
After all, a short sequence of statements should be enough to successfully (and platform-independently) include boost
into a CMake
project:
find_package(Boost 1.57.0 COMPONENTS system filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(BoostTest main.cpp)
target_link_libraries(BoostTest ${Boost_LIBRARIES})
这些线条在这里发挥着神奇的作用.作为参考,这里是一个完整的 CMakeLists.txt 文件,我用于在单独的命令行项目中进行调试:
These lines are doing the magic here. For reference, here is a complete CMakeLists.txt file that I used for debugging in a separate command line project:
cmake_minimum_required(VERSION 2.8.4)
project(BoostTest)
message(STATUS "start running cmake...")
find_package(Boost 1.57.0 COMPONENTS system filesystem REQUIRED)
if(Boost_FOUND)
message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
message(STATUS "Boost_VERSION: ${Boost_VERSION}")
include_directories(${Boost_INCLUDE_DIRS})
endif()
add_executable(BoostTest main.cpp)
if(Boost_FOUND)
target_link_libraries(BoostTest ${Boost_LIBRARIES})
endif()
这篇关于如何使用 CMake 将外部库 (boost) 包含到 CLion C++ 项目中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用 CMake 将外部库 (boost) 包含到 CLion C++ 项目中?
基础教程推荐
- Windows Media Foundation 录制音频 2021-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 从 std::cin 读取密码 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01