gpt4 book ai didi

c++ - 如何使用 CMake 将外部库( boost )包含到 CLion C++ 项目中?

转载 作者:IT老高 更新时间:2023-10-28 13:58:15 30 4
gpt4 key购买 nike

我有以下 C++ 开发设置:

  • OS X Yosemite
  • CLion 140.2310.6(JetBrains 使用 CMake 作为构建系统的跨平台 C/C++-IDE)
  • 通过 brew install boostboost 安装到 /usr/local/Cellar/boost/

现在,我的目标是设置一个简单的项目并包含 boost 库。我只定义了一个 test.cpp 文件,如下所示:

#include <iostream>
#include <boost>

using namespace std;

int test() {
cout << "Hello, World!" << endl;
return 0;
}

我的 CMakeLists.txt 文件如下所示:

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})

当我构建项目时,我收到以下错误:

/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] Error 1 make[2]: *** [CMakeFiles/MyProject.dir/all] Error 2 make[1]: *** [CMakeFiles/MyProject.dir/rule] Error 2 make: *** [MyProject] Error 2

我到处调整路径,还使用了 add_librarytarget_link_libraries,但都没有成功构建项目。

有人能指出正确的方向吗?如何确保我可以将 boost 的功能包含到我的 CLion C++ 项目中?

更新:感谢@Waxo 的回答,我在 CMakeLists.txt 文件中使用了以下代码:

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})

我现在克服了 file not found-错误,但我得到了以下信息:

CMake Error at /Applications/CLion EAP.app/Contents/bin/cmake/share/cmake-3.1/Modules/FindBoost.cmake:685 (file):

file STRINGS file "/usr/local/Cellar/boost/1.57.0/boost/version.hpp" cannot be read.

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 ")

最佳答案

在这个问题上花了整个下午后,我自己解决了。这是一个相当愚蠢的错误,@Waxo 答案中的所有提示都非常有帮助。

我写 #include <boost> 对我不起作用的原因在我的 test.cpp 文件中,这显然是错误的。相反,您需要直接引用您实际想要包含的头文件,因此您应该编写例如#include <boost/thread.hpp> .

毕竟,一个简短的语句序列应该足以成功(并且独立于平台)包括 boost变成 CMake项目:

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 文件,我用于在单独的命令行项目中进行调试:

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()

关于c++ - 如何使用 CMake 将外部库( boost )包含到 CLion C++ 项目中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28761323/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com