我正在开发一个静态库,并且正在使用CMake。这个图书馆需要加强。所以我做了以下几件事:
set(LIBRARY_NAME "MyLib")
set(LIBRARY_VERSION 1.0.0)
project(${LIBRARY_NAME} VERSION ${LIBRARY_VERSION})
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
find_package(Boost COMPONENTS system filesystem regex thread date_time log log_setup REQUIRED)
include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIR})
add_library(${LIBRARY_NAME} STATIC xx.cpp)
target_link_libraries(${LIBRARY_NAME} PUBLIC ${Boost_LIBRARIES})到现在为止一切都很好。
现在,我需要使这个库可以安装。因此,我遵循本教程https://cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html
在我的机器上一切都很好。但是,当我将已安装的文件(通过调用make-install生成的文件)转移到另一台计算机并试图使用find_package(MyLib)时,会出现问题,称它可以在原机器上的某个位置找到boost。我深入研究了MyLibTargets.cmake文件,并看到了Boost库的绝对路径!
为什么会发生这种事?我怎么才能阻止这一切?
发布于 2017-11-22 22:10:38
如果您从另一台机器获取cmake构建目录并使用它,这将无法工作。cmake不打算支持来自同一工作目录的不同平台。
为此,您需要使用非源构建。但是,一旦使用cmake进行了就地构建,目录就会被烧毁,源外构建不再适用于此源树。在这种情况下,您需要删除所有cmake临时文件和文件夹,以使源树再次工作。
https://stackoverflow.com/questions/47444421
复制相似问题