【发布时间】:2021-08-19 18:17:14
【问题描述】:
假设我必须分发一个依赖于其他库 libB 和 libC 的 C++ 库 libA。
最终用户只需要包含 libA 的头文件,但还需要链接其他两个。
将所有库一起分发的最佳方式是什么?
可以用cpack来打理吗?
【问题讨论】:
假设我必须分发一个依赖于其他库 libB 和 libC 的 C++ 库 libA。
最终用户只需要包含 libA 的头文件,但还需要链接其他两个。
将所有库一起分发的最佳方式是什么?
可以用cpack来打理吗?
【问题讨论】:
如果您必须隐藏源代码,那么您可以自己预编译库,然后为每个分发单独分发静态 .a 文件和头文件。
但是,如果您希望代码对最终用户透明,并让用户自己编译库。那你可以试试cmake。
库的通用文件夹结构如下所示
MainFolder
然后您可以在根文件夹中创建一个 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 标志来包含包含目录。
【讨论】: