BD *_*ill 51 linux build-automation boost cmake wt
我已经安装了最新版本的Boost /usr/local(包含in /usr/local/include/boost和库/usr/local/lib/boost),我现在正尝试从源代码安装Wt,但CMake(版本2.6)似乎无法找到Boost安装.它尝试提供有关设置BOOST_DIR和Boost_LIBRARYDIR的有用建议,但我无法通过调整这些变量来使其工作.
我得到的最新错误消息是它找不到库,但它似乎表明它正在使用"/ usr/local/include"作为包含路径,这是不正确的(我可以'似乎解决了这个问题).是否有一个解决方案,他们的头顶,或者我需要在CMake内部捣乱才能弄明白?
ypn*_*nos 37
您应该看看FindBoost.cmake脚本,它处理Boost检测并设置所有Boost变量.它通常驻留在/usr/share/cmake-2.6/Modules/.在其中,您将找到文档.例如:
# These last three variables are available also as environment variables:
#
# BOOST_ROOT or BOOSTROOT The preferred installation prefix for searching for
# Boost. Set this if the module has problems finding
# the proper Boost installation.
#
Run Code Online (Sandbox Code Playgroud)
与BOOST_ROOT相反,您引用的变量实际上是由FindBoost模块设置的变量.请注意,您不必(也可能也不想)编辑CMake项目配置以设置BOOST_ROOT.相反,您应该使用环境变量,例如调用
# BOOST_ROOT=/usr/local/... ccmake .
小智 35
我终于能够得到我想要的东西了
cmake -DCMAKE_INSTALL_PREFIX=$TARGET \
-DBoost_NO_BOOST_CMAKE=TRUE \
-DBoost_NO_SYSTEM_PATHS=TRUE \
-DBOOST_ROOT:PATHNAME=$TARGET \
-DBoost_LIBRARY_DIRS:FILEPATH=${TARGET}/lib
Run Code Online (Sandbox Code Playgroud)
Cam*_*mer 21
您只需要BOOST_ROOT,但如果您有多个安装或针对iOS或Android进行交叉编译,那么您将要禁用在本地Boost上搜索系统.在这种情况下,add Boost_NO_SYSTEM_PATHS设置为false.
set( BOOST_ROOT "" CACHE PATH "Boost library path" )
set( Boost_NO_SYSTEM_PATHS on CACHE BOOL "Do not search system for Boost" )
Run Code Online (Sandbox Code Playgroud)
通常,这是使用语法在CMake命令行上传递的-D<VAR>=value.
正式说FindBoost页面声明这些变量应该用于"提示"Boost的位置.
此模块从变量中读取有关搜索位置的提示:
BOOST_ROOT - Preferred installation prefix
(or BOOSTROOT)
BOOST_INCLUDEDIR - Preferred include directory e.g. <prefix>/include
BOOST_LIBRARYDIR - Preferred library directory e.g. <prefix>/lib
Boost_NO_SYSTEM_PATHS - Set to ON to disable searching in locations not
specified by these hint variables. Default is OFF.
Boost_ADDITIONAL_VERSIONS
- List of Boost versions not known to this module
(Boost install locations may contain the version)
Run Code Online (Sandbox Code Playgroud)
这在理论上是正确的咒语:
cmake -DBoost_NO_SYSTEM_PATHS=TRUE \
-DBOOST_ROOT=/path/to/boost-dir
Run Code Online (Sandbox Code Playgroud)
include( ExternalProject )
set( boost_URL "http://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.tar.bz2" )
set( boost_SHA1 "9f1dd4fa364a3e3156a77dc17aa562ef06404ff6" )
set( boost_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/third_party/boost )
set( boost_INCLUDE_DIR ${boost_INSTALL}/include )
set( boost_LIB_DIR ${boost_INSTALL}/lib )
ExternalProject_Add( boost
PREFIX boost
URL ${boost_URL}
URL_HASH SHA1=${boost_SHA1}
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND
./bootstrap.sh
--with-libraries=filesystem
--with-libraries=system
--with-libraries=date_time
--prefix=<INSTALL_DIR>
BUILD_COMMAND
./b2 install link=static variant=release threading=multi runtime-link=static
INSTALL_COMMAND ""
INSTALL_DIR ${boost_INSTALL} )
set( Boost_LIBRARIES
${boost_LIB_DIR}/libboost_filesystem.a
${boost_LIB_DIR}/libboost_system.a
${boost_LIB_DIR}/libboost_date_time.a )
message( STATUS "Boost static libs: " ${Boost_LIBRARIES} )
Run Code Online (Sandbox Code Playgroud)
然后当你调用这个脚本时,你需要包含boost.cmake脚本(我的是在一个子目录中),包含头文件,指示依赖项,并链接库.
include( boost )
include_directories( ${boost_INCLUDE_DIR} )
add_dependencies( MyProject boost )
target_link_libraries( MyProject
${Boost_LIBRARIES} )
Run Code Online (Sandbox Code Playgroud)
小智 14
我有一个类似的问题,CMake只找到供应商安装的Boost,但我的集群有一个本地安装的版本,这是我想要它使用的.Red Hat Linux 6.
无论如何,它看起来像所有的BOOSTROOT,BOOST_ROOT和Boost_DIR东西会恼火,除非一个也设置Boost_NO_BOOST_CMAKE(例如添加到cmd线-DBoost_NO_BOOST_CMAKE=TRUE).
(我会承认CMake对多平台的用处,但我仍然讨厌它.)
jao*_*aor 14
通常,最常见的错误是在添加新选项后不清理构建目录.我从系统数据包管理器安装了Boost.它的版本是1.49.
我还下载了Boost 1.53并"安装"了它$HOME/installs.
我在项目中唯一要做的就是(我保留资料来源my_project_directory/src):
cd my_project_directory
mkdir build
cd build
cmake -DCMAKE_INCLUDE_PATH=$HOME/installs/include -DCMAKE_LIBRARY_PATH=$HOME/installs/lib ../src
Run Code Online (Sandbox Code Playgroud)
就是这样.Ta bum tss.
但如果我做了cd build- > cmake ../src它会从系统路径设置Boost.然后做什么cmake -DCMAKE_INCLUDE_PATH=$HOME/installs/include -DCMAKE_LIBRARY_PATH=$HOME/installs/lib ../src都不会改变.
你必须清理你的构建目录(cd build && rm -rf *;))
Off*_*rmo 11
有一个通用的方法来给出关于在哪里找到库的CMake指导.
在寻找库时,CMake首先查看以下变量:
CMAKE_LIBRARY_PATH和LD_LIBRARY_PATH图书馆CMAKE_INCLUDE_PATH并INCLUDE_PATH包括如果您在其中一个环境变量中声明Boost文件,CMake会找到它.例:
export CMAKE_LIBRARY_PATH="/stuff/lib.boost.1.52/lib:$CMAKE_LIBRARY_PATH"
export CMAKE_INCLUDE_PATH="/stuff/lib.boost.1.52/include:$CMAKE_INCLUDE_PATH"
Run Code Online (Sandbox Code Playgroud)
如果它太麻烦,你也可以使用我写的一个很好的安装工具,它会为你做一切:C++版本管理器
hun*_*tit 11
我有类似的问题,我可以通过在我的CMakeLists.txt文件中添加以下行来使用自定义的Boost库:
set(Boost_NO_SYSTEM_PATHS TRUE)
if (Boost_NO_SYSTEM_PATHS)
set(BOOST_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../3p/boost")
set(BOOST_INCLUDE_DIRS "${BOOST_ROOT}/include")
set(BOOST_LIBRARY_DIRS "${BOOST_ROOT}/lib")
endif (Boost_NO_SYSTEM_PATHS)
find_package(Boost REQUIRED regex date_time system filesystem thread graph program_options)
include_directories(${BOOST_INCLUDE_DIRS})
Run Code Online (Sandbox Code Playgroud)
在深入研究 CMake 并进行实验后,我确定 CMake 对我的所有 Boost 库都包含在/usr/local/lib/boost而不是/usr/local/lib. 一旦我将它们软链接回来,构建就开始工作了。
| 归档时间: |
|
| 查看次数: |
102024 次 |
| 最近记录: |