在 cpack 输出中包含外部库

Posted

技术标签:

【中文标题】在 cpack 输出中包含外部库【英文标题】:Including external libraries in cpack output 【发布时间】:2018-08-04 04:06:53 【问题描述】:

我目前正在开发一个 cmake 项目,该项目正在使用通过 find_package 函数导入的外部库。我的问题围绕 cpack 以及我应该如何将找到的包添加到 cpack 输出中。例如,如果我使用这个

find_package(OpenGL REQUIRED)

add_executable(Example_App MACOSX_BUNDLE src/main.cpp)

target_include_directories(Example_App SYSTEM PUBLIC $OPENGL_INCLUDE_DIR)
target_link_libraries(Example_App PUBLIC $OPENGL_LIBRARIES)

install(TARGETS Example_App
    BUNDLE DESTINATION "."
    RUNTIME DESTINATION bin)

如果我然后运行 ​​cmake .. 然后 make 和 make package 我从 cpack 的输出(如果需要,我也可以包含我的 cpack 代码示例)然后是。 ExampleApp-linux.tar.bz2

- bin
-- Example_App
- Share
-- Resource files

而不是类似的东西:

- bin
-- Example_App
- Lib
-- OpenGL.a
- Share
-- Resource files

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

您必须为外部项目库显式添加安装规则。

例如:

install(FILES $OPENGL_LIBRARIES
  RUNTIME DESTINATION bin COMPONENT RuntimeLibraries
  LIBRARY DESTINATION bin COMPONENT RuntimeLibraries
  ARCHIVE DESTINATION Lib COMPONENT Development
  )

或者您可以使用特定的库引用,例如 $OPENGL_gl_LIBRARY,而不是 $OPENGL_LIBRARIES。详情请见Modules/FindOpenGL.cmake。

【讨论】:

以上是关于在 cpack 输出中包含外部库的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 ProGuard 在输出 jar 中包含引用的库

在我的构建输出中包含 Nuget 依赖项?

使用 CPACK 自定义 NSIS 安装程序

如何在 CodeIgniter 中包含外部库?

PyCharm 在项目中包含和修改外部库

如何在 CMake 项目中包含外部库