0

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

4

1 回答 1

1

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

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

于 2013-05-09T10:34:04.543 回答