安装和导出仅限INTERFACE库,CMake

时间:2017-12-08 16:32:49

标签: c++ cmake install

新的CMake用户。

我使用以下CMake文件制作了一个简单的标题库:

# Install the header file.
install(FILES include/mylib.hpp DESTINATION "include/mylib-${PROJECT_VERSION}")

来自http://foonathan.net/blog/2016/03/03/cmake-install.html

我了解到有几个步骤可以安装库并让它可以从另一个CMake项目中使用。首先,它必须“安装”,然后必须“导出”。然后是find_package,但是在我完成前两步之后我将穿过那座桥。

因此,按照示例,我想我可以将以下内容添加到我的CMake文件的底部:

var notYetAwaited = DoSomethingAsync();

if (done) return "yay!";

await notYetAwaited;

但该指南还讨论了在TARGETS上使用install,然后将EXPORT添加到目标安装命令。

这有多少适用于仅包含标题的库,其中除了标题之外我没有其他文件的编译代码?

如何应用以下所述的步骤:http://foonathan.net/blog/2016/03/03/cmake-install.html 到INTERFACE唯一的图书馆?我的项目中缺少.cpp文件让我质疑哪些说明适用且不适用。

2 个答案:

答案 0 :(得分:11)

试试这个:

cmake/mylibConfig.cmake.in

@PACKAGE_INIT@ include("${CMAKE_CURRENT_LIST_DIR}/mylibTargets.cmake") check_required_components("@PROJECT_NAME@") 的内容应仅为此

find_package(mylib CONFIG REQUIRED)
target_link_libraries(MyApp mylib) # installed include/ path automatically added

如果您完成所有这些操作,不仅可以使您的标题库“可安装”,而且还可以“查找”。用户可以像这样导入您的库:

new Promise

答案 1 :(得分:0)

只是https://stackoverflow.com/a/49143782/2119944

的一小部分

cmake / mylibConfig.cmake.in可能看起来像这样:

@PACKAGE_INIT@

include("${CMAKE_INSTALL_PREFIX}/lib/cmake/mylib/mylibTargets.cmake")
check_required_components("@PROJECT_NAME@")

否则,它将指向本地项目目录。