C++ CMake链接行为取决于BOOST_根

C++ CMake链接行为取决于BOOST_根,c++,boost,cmake,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的位置,我的问题如下: 当

我正在使用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不能在这两种情况下都通过完整路径?

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

只需尝试将CMake中的
链接目录设置为
路径/to/Boost/Libraries
,您就会注意到不同的行为