【问题标题】:CMake link behaviour depends on BOOST_ROOTCMake 链接行为取决于 BOOST_ROOT
【发布时间】:2013-05-03 07:54:12
【问题描述】:

我正在使用 CMake 构建一个项目,其中包括与 boost 相关的链接。我使用 CMake 2.8.7,我有

set(Boost_NO_SYSTEM_PATHS true)

我用

find_package(Boost COMPONENTS system filesystem regex REQUIRED)

然后我使用链接

target_link_libraries(projectname ${Boost_LIBRARIES})

我使用环境变量BOOST_ROOT来指定Boost的位置,我的问题如下:

当我设置时

BOOST_ROOT=/opt/Boost_1_47

CMake 将库的完整路径传递给链接器,而如果我设置了

BOOST_ROOT=/usr

它使用链接

-lboost_filesystem-mt

等等。 CMakeLists.txt 在这两种情况下都是一样的,我唯一改变的是环境变量 BOOST_ROOT。为什么 CMake 在这两种情况下都不传递完整路径?

【问题讨论】:

    标签: c++ boost cmake


    【解决方案1】:

    链接器能够找到标准路径中的库,例如/lib, /lib64, /usr/lib, /usr/lib64 etc。因此,在这种情况下,CMake 不需要告诉链接器库的位置。但是对于/opt/boost_1_47,由于它不是标准路径,所以 linker 不知道库的位置。

    只需尝试将 CMake 中的 LINK_DIRECTORIES 设置为 Path/To/Boost/Libraries,您就会注意到不同的行为。

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 2014-10-25
      • 1970-01-01
      相关资源
      最近更新 更多