【问题标题】:cmake/cpack distribute a library and its dependenciescmake/cpack 分发一个库及其依赖项
【发布时间】:2021-08-19 18:17:14
【问题描述】:

假设我必须分发一个依赖于其他库 libBlibC 的 C++ 库 libA

最终用户只需要包含 libA 的头文件,但还需要链接其他两个。

将所有库一起分发的最佳方式是什么?

可以用cpack来打理吗?

【问题讨论】:

    标签: c++ cmake cpack


    【解决方案1】:

    如果您必须隐藏源代码,那么您可以自己预编译库,然后为每个分发单独分发静态 .a 文件和头文件。

    但是,如果您希望代码对最终用户透明,并让用户自己编译库。那你可以试试cmake。

    库的通用文件夹结构如下所示

    MainFolder
    
    • src(拥有所有必需的 Src 文件)
    • 包括(要包括的所有必要文件)
    • test(在安装时运行测试用例以验证安装成功 - 可选)

    然后您可以在根文件夹中创建一个 CMakeLists.txt 文件,如下所示, cmake_minimum_required(版本 3.2) 项目(MyAwesomeLibrary)

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")// Sets up the compiler and flags
    include_directories("${CMAKE_SOURCE_DIR}/include")  // This includes the .h files in include directory
    
    // Set the Codes to be compiled for Different Libraries
    
    set (LIB_A ${CMAKE_SOURCE_DIR}/lib_a.c);
    set (LIB_B ${CMAKE_SOURCE_DIR}/lib_b.c);
    set (LIB_C ${CMAKE_SOURCE_DIR}/lib_c.c);
    
    add_library(MyAwesomeStaticLib STATIC ${LIB_A} ${LIB_B} ${LIB_C})  // Generates the static library
    

    如果您要为每个库编译多个文件,则可以参考此链接。 how would I compile multiple files in a folder?

    然后最终用户可以通过链接生成的MyAwesomeStaticLib.a file 来使用该库,还可以使用 -I 标志来包含包含目录。

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 1970-01-01
      • 2019-01-07
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多