CMake链接行为取决于BOOST_ROOT

时间:2013-05-03 07:54:13

标签: c++ boost cmake

我正在使用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都没有通过完整路径?

1 个答案:

答案 0 :(得分:1)

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

尝试将CMake中的LINK_DIRECTORIES设置为Path/To/Boost/Libraries,您会发现不同的行为。