如何使用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_libraries
将file(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 ")
在整个问题上花费了整个下午后,我自己解决了问题。 这是一个非常愚蠢的错误,@ 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()
尝试使用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()