指示CMake为多个Boost安装选择正确的版本

时间:2015-10-19 06:04:20

标签: boost cmake

我正在使用Ubuntu 12.04。我的系统给出了Boost 1.46。由于我不得不使用boost lockfree队列,我尝试从官方Boost网站安装1.59。因此,我实际上安装了2个版本的boost。系统默认安装在/ usr /&版本1.59安装在/ usr / local。

我有一个使用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(即旧版本的boost)。

3 个答案:

答案 0 :(得分:6)

您可以通过查看configure输出或构建目录中的CMakeCache.txt文件来检查找到哪个提升。 configure输出告诉你它找到Boost的路径。在CMakeCache.txt文件中,您可以搜索BOOST_LIB *或BOOST_INCLUDE *,您应该获得库/标头的路径。这有助于识别版本。

如果您想指定两个Boost安装中的一个,那么您可以通过BOOST_ROOT通过CM来修改Boost的根目录。这看起来像

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

我直接打开了CMakeCache.txt文件,并在Boost_INCLUDE_DIR中输入了boost本地安装的位置,这是项目所需要的,以避免与/usr/local中的常规安装发生干扰。这很好用,避免了麻烦