使用带有 boost 的 cmake 时得到“/usr/lib64/lib64”

jia*_*zhe 6 boost cmake

我有一个使用 FindBoost.cmake 来定位 boost 的 cmake 控制包。我的两个用户向我报告了这个错误,但我无法在我的计算机上重现它。

在解决目标可执行文件的依赖关系时,make 声明以下错误:

make[2]: *** No rule to make target `/usr/lib64/lib64/libboost_filesystem-mt.so.5', needed by `src/ht-asm'.  Stop.
Run Code Online (Sandbox Code Playgroud)

在添加目标“ht-asm”之前,我已经在我的 makefile 中设置了库目录:

link_directories(
    ${Boost_LIBRARY_DIRS}
)
Run Code Online (Sandbox Code Playgroud)

我完全不知道这个问题,因为我从来没有在我的电脑上遇到过它们(一台使用 Debian 6,另一台使用 Fedora 18)。

小智 3

我在这里找到了适用于 cmake 2.8.12.1 和 boost 1.41.0-18 的解决方案

这是逐字文本...


问题出在 boost-devel 分布式文件上:/usr/lib64/boost/Boost-relwithdebinfo.cmake

cmake-2.6包根本不使用此文件,因为该FindBoost.cmake文件返回(正确的)boost 库的完整路径。该cmake28-2.8.8 FindBoost.cmake文件返回类似 的库字符串boost_date_time-mt-shared,它们是 中定义的目标/usr/lib64/boost/Boost-relwithdebinfo.cmake

在 的最顶部/usr/lib64/boost/Boost-relwithdebinfo.cmake,从 cmake 文件本身的位置定义了一个名为 的变量_IMPORT_PREFIX,然后像这样使用:

#----------------------------------------------------------------
# Generated CMake target import file for configuration "RelWithDebInfo".
#----------------------------------------------------------------

# Commands may need to know the format version.
SET(CMAKE_IMPORT_FILE_VERSION 1)

# Compute the installation prefix relative to this file.
GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)

# Import target "boost_date_time-static" for configuration "RelWithDebInfo"
SET_PROPERTY(TARGET boost_date_time-static APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO)
SET_TARGET_PROPERTIES(boost_date_time-static PROPERTIES
  IMPORTED_LOCATION_RELWITHDEBINFO "${_IMPORT_PREFIX}/lib64/libboost_date_time.a"
  )
Run Code Online (Sandbox Code Playgroud)

这设置_IMPORT_PREFIX为,它与其中也/usr/lib64包含的另一个字符串连接。/lib64/我发现如果我简单地更改文件以包含第三次GET_FILENAME_COMPONENT调用,它就可以正常工作。就像这样:

#----------------------------------------------------------------
# Generated CMake target import file for configuration "RelWithDebInfo".
#----------------------------------------------------------------

# Commands may need to know the format version.
SET(CMAKE_IMPORT_FILE_VERSION 1)

# Compute the installation prefix relative to this file.
GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)

# Import target "boost_date_time-static" for configuration "RelWithDebInfo"
SET_PROPERTY(TARGET boost_date_time-static APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO)
SET_TARGET_PROPERTIES(boost_date_time-static PROPERTIES
  IMPORTED_LOCATION_RELWITHDEBINFO "${_IMPORT_PREFIX}/lib64/libboost_date_time.a"
  )
Run Code Online (Sandbox Code Playgroud)