【发布时间】:2015-04-29 22:39:15
【问题描述】:
我有以下 C++ 开发设置:
OS X Yosemite-
CLion 140.2310.6(JetBrains 使用CMake作为构建系统的跨平台 C/C++-IDE) - 通过
brew install boost安装boost到/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: 致命错误:找不到“升压”文件
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
我到处调整路径,还使用了add_library 和target_link_libraries,但都没有成功构建项目。
有人能指出正确的方向吗?如何确保我可以将boosts 功能包含到我的 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-错误,但我得到了以下信息:
/Applications/CLion 处的 CMake 错误 EAP.app/Contents/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 ")
【问题讨论】:
-
不要手动设置
Boost变量。find_package应该开箱即用。如果没有,您应该将Boost_DIR传递给cmake命令。不要在 CMakeLists.txt 中写入系统特定的路径。 cmake 的重点是跨平台。很少需要特定于平台的配置,如果是这样的话,可以通过命令行或通过 cmake-gui 传递配置参数。 -
如果我不包含它,我会返回 file not found-错误...但是,我确信我错过了其他内容和您的建议对我来说似乎很有意义!我的主要问题是我无法理解 CMake 实际工作原理的一些基础知识,所以我想我必须坐下来做功课,因为我似乎找不到简单的解决方案......
-
我现在注意到您的 boost 安装在非标准路径中 (
/usr/local/cellar)。 The proper way 通知 cmake 在该目录中查找 boost 是用cmake -DBOOST_ROOT=/usr/local/Cellar/boost/1.57.0 ...调用 cmake