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

时间:2014-01-19 06:49:55

标签: boost cmake

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

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

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

我在makefile中设置了库dirs,然后再添加目标“ht-asm”:

link_directories(
    ${Boost_LIBRARY_DIRS}
)

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

1 个答案:

答案 0 :(得分:3)

我发现这里的解决方案适用于cmake 2.8.12.1,增强1.41.0-18

以下是逐字文字......


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

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

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

#----------------------------------------------------------------
# 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/的其他字符串连接在一起。我发现,如果我只是将文件更改为包含第3个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"
  )