如何使用CMake将外部库(增强型)包括到CLion C ++项目中?

我具有用于C ++开发的以下设置:

  • file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")
  • file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")(JetBrains使用target_link_libraries作为构建系统的跨平台C / C ++-IDE)
  • 通过target_link_librariesfile(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")安装到/usr/local/Cellar/boost/

现在,我的目标是建立一个简单的项目,并包括file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")库。 我只定义了一个如下所示的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:   严重错误:找不到'boost'文件

make [3]:*** [CMakeFiles / MyProject.dir / test.cpp.o]错误1   make [2]:*** [CMakeFiles / MyProject.dir / all]错误2   make [1]:*** [CMakeFiles / MyProject.dir / rule]错误2   make:*** [MyProject]错误2

我在这里到处调整路径,并使用file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")target_link_libraries,但没有一个使项目成功构建。

有人可以指出正确的方向,如何确保我可以在我的CLion C ++项目中包括file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")s功能吗?

更新:感谢@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})

我现在越过了文件not found-error,但是得到了以下内容:

在/ Applications / CLion的CMake错误   EAP.app/内容/bin/cmake/share/cmake-3.1/Modules/FindBoost.cmake:685   (文件):

不能读取文件“ STRINGS”文件“ /usr/local/Cellar/boost/1.57.0/boost/version.hpp”。

调用堆栈(最近的调用优先):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 ")

nburk asked 2020-02-29T13:06:30Z
2个解决方案
64 votes

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

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

毕竟,简短的语句序列就足以成功地(独立于平台)将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()
nburk answered 2020-02-29T13:19:56Z
16 votes

尝试使用CMake find_package(Boost)

src:[http://www.cmake.org/cmake/help/v3.0/module/FindBoost.html]

它工作得更好,并且CMake用于交叉编译,并且给出绝对路径在CMake项目中不好。

编辑:

也看一下这个:如何使用CMake将C ++程序与Boost链接

因为您实际上没有将boost库链接到可执行文件。

带Boost的CMake通常如下所示:

set(Boost_USE_STATIC_LIBS        ON) # only find static libs
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
find_package(Boost 1.57.0 COMPONENTS date_time filesystem system ...)
if(Boost_FOUND)
  include_directories(${Boost_INCLUDE_DIRS})
  add_executable(foo foo.cc)
  target_link_libraries(foo ${Boost_LIBRARIES})
endif()
Waxo answered 2020-02-29T13:20:43Z
translate from https://stackoverflow.com:/questions/28761323/how-to-include-external-library-boost-into-clion-c-project-with-cmake