CMake以绝对路径输出目标

时间:2017-11-22 21:51:51

标签: c++ boost cmake

我正在开发一个静态库,我正在使用CMake。这个库需要Boost。所以我做了以下事情:

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)时,提出的问题是它可以在一个应该找到的地方找到提升在我原来的机器上。我深入研究了MyLibTargets.cmake文件,看到 Boost 库的绝对路径!

为什么这是幸福的?我怎么能阻止这个?

1 个答案:

答案 0 :(得分:0)

如果您使用了cmake构建目录并从另一台计算机上使用它,那么这将无法正常工作。 cmake不支持来自同一工作目录的不同平台。

为此,您需要使用源代码构建。但是一旦你使用cmake进行构建,目录就会被烧毁,而源代码构建不再适用于这个源代码树。在这种情况下,您需要删除所有cmake临时文件和文件夹以使源树再次运行。