【问题标题】:Got "/usr/lib64/lib64" while using cmake with boost使用带有 boost 的 cmake 时得到“/usr/lib64/lib64”
【发布时间】:2014-01-19 06:49:54
【问题描述】:

我有一个使用 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.

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

link_directories(
    ${Boost_LIBRARY_DIRS}
)

我完全不知道这个问题,因为我从未在我的计算机上遇到过他们(一台使用 Debian 6,另一台使用 Fedora 18)。

【问题讨论】:

  • @ruslo 是的,我已经为每个目标设置了 target_link_libraries。
  • @ruslo 这个问题发生了两次。一开始我没有使用link_directories,这个问题被用户反馈了。之后有人叫我加link_directories,这个问题又被举报了。
  • someone told me to add link_directories恕我直言不好的建议(:
  • 此文件不存在。我猜它应该是/usr/lib64/libboost_XXX.so,但是 cmake 将此文件名分配为我的目标的依赖项。
  • @ruslo find_package(Boost REQUIRED COMPONENTS filesystem program_options regex system thread)

标签: boost cmake


【解决方案1】:

我在这里找到了适用于 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"
  )

这会将_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"
  )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2016-03-25
    • 2011-07-31
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多