2015-10-19 39 views
0

我正在使用Ubuntu 12.04。我的系统给出了升压1.46。由于我不得不使用boost lockfree队列,我尝试从官方Boost网站安装1.59。因此,我实际上已经安装了2个版本的boost。系统默认安装在/ usr/&版本1.59中安装在/ usr/local中。指示CMake为多个Boost安装选择正确版本

我有一个使用cmake的代码库。这是一个相当大的代码库。我怀疑CMake仍在看版本1.46。我应该修复它以查看/ usr/local中的版本1.59。

我CMakeFiles(相关部分只):

find_package(Boost 1.59 EXACT REQUIRED COMPONENTS system thread date_time) 
include_directories(${Boost_INCLUDE_DIRS}) 
find_package(Threads REQUIRED) 

target_link_libraries(hello_node 
         ${Boost_THREAD_LIBRARY} 
         ${catkin_LIBRARIES} 
         boost_system 
         boost_thread 
         rt 
         boost_date_time 
) 

target_link_libraries(dgem 
         ${Boost_THREAD_LIBRARY} 
         ${catkin_LIBRARIES} 
         boost_system 
         boost_thread 
         rt 
         boost_date_time 
) 

与此有关的cmake似乎使用/ usr/include目录(即旧版本升压)。

+0

检查通过在CMakeLists.txt中发送消息找到哪个增强版本 –

+0

@MertMertce:为什么添加消息?它由FindBoost本身打印。看着输出就够了。 – usr1234567

回答

3

您可以通过查看配置输出或生成目录中的CMakeCache.txt文件来检查发现了哪种增强。配置输出会告诉您找到Boost的路径。在CMakeCache.txt文件中,您可以搜索BOOST_LIB *或BOOST_INCLUDE *,并且您应该获取库/头文件的路径。这将有助于确定版本。

如果您想要指定两个Boost安装中的一个,请通过BOOST_ROOT传递CMake Boost的根目录。这看起来像

cmake -DBOOST_ROOT=/usr/local/boost_1.59 <otherstuff> 
+0

好像-DBOOST_ROOT修复了这个问题。你能否更新答案将其设置为CMakeFile.txt。 – mkuse

+2

这并不意味着在您的CMakeLists.txt中。可能有很多人安装了正确版本的Boost。他们很好,CMake会找到他们的Boost安装。就是你有多个Boost安装,因此你必须修改CMake试图找到Boost的方式。如果你是唯一的用户,在'find_package(Boost ...)'前加'set(BOOST_ROOT“/usr/local/bost_1.59”)一行。 – usr1234567

0

documentation开始,FindBoost模块将版本作为参数以及另一个参数EXACT。除非你设置了后者,否则前者将作为最低版本,并且在你的系统中找到更大的版本对于cmake来说是很好的。

它现在取决于它是否适合您的项目。我不能这么说。

+0

CMake错误在/usr/local/share/cmake-3.2/Modules/FindBoost.cmake:1182(消息): 无法找到请求的Boost库。 Boost版本:1.46.1 Boost包含路径:/ usr/include 检测到的Boost版本太旧。请求的版本是1.59。 – mkuse

+0

好像我的cmake无法找到我安装的最新版本。我应该如何解决它? – mkuse

+0

@mkuse另请参阅文档:“BOOST_ROOT - 首选安装前缀”。所以将它设置为例如''/ usr/local“'在搜索Boost之前? –

-1

我直接打开CMakeCache.txt文件,并在我需要一个项目,以避免在/ usr /本地亩通常安装在干涉中进入Boost_INCLUDE_DIR升压本地安装的位置。这运作良好,并避免麻烦

+0

但是这个烦人的事情并没有为自己工作。 – usr1234567