laks.it
laks.it

Reputation: 165

cmake/cpack distribute a library and its dependencies

Let's say I have to distribute a C++ library libA which depends on other libraries libB and libC.

The final user will have to include just the header files of libA but needs to link also the others two.

What's the preferable way to distribute all together the libraries?

Is it possible to use cpack to take care of it?

Upvotes: 0

Views: 420

Answers (1)

ThivinAnandh
ThivinAnandh

Reputation: 286

If you have to hide the source code, then you could precompile the libraries yourselves and just distribute the static .a files and the header files seperately for each distribution.

However, If you want the code to be transparent to the end users and let the users compile the libraries on their own. Then you could try cmake.

The common folder structure for a library will look like this

MainFolder
  • src ( To have all the required Src files )
  • include ( all the necessary files to be included )
  • test ( to run test cases upon installation to validate a successfull installation -- optional )

Then you could create a CMakeLists.txt file in the root folder which would look like this, cmake_minimum_required(VERSION 3.2) project(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

If you have multiple files to be compiled for each of the libraries then you can refer this link. how would I compile multiple files in a folder?

Then the end user can use the library by linking the generated MyAwesomeStaticLib.a file and also use the -I flag to include the include directories.

Upvotes: 1

Related Questions