我有一个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)。
答案 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"
)