我正在使用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都没有通过完整路径?
答案 0 :(得分:1)
链接器能够找到标准路径中的库,如/lib, /lib64, /usr/lib, /usr/lib64 etc
。因此,在这种情况下,CMake不需要告诉链接器库位于何处。但是在/opt/boost_1_47
的情况下,因为它不是标准路径,所以链接器不知道库位于何处。
尝试将CMake中的LINK_DIRECTORIES
设置为Path/To/Boost/Libraries
,您会发现不同的行为。