From d207150f47e3c5872c8d46c27d954d221c9b1834 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Tue, 5 Dec 2017 10:39:40 +0100 Subject: Details external library. Linting and little typo fixes. Change-Id: I714477b429c9257595ee8eae05ba1ef4901234a2 Signed-off-by: Romain Forlot --- docs/dev_guide/3_advanced_usage.md | 33 +++++++++++++++++++++++++++++- docs/dev_guide/4_advanced_customization.md | 1 - 2 files changed, 32 insertions(+), 2 deletions(-) (limited to 'docs/dev_guide') diff --git a/docs/dev_guide/3_advanced_usage.md b/docs/dev_guide/3_advanced_usage.md index ae8d1ec..c08123a 100644 --- a/docs/dev_guide/3_advanced_usage.md +++ b/docs/dev_guide/3_advanced_usage.md @@ -70,6 +70,8 @@ SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES ## Add external 3rd party library +### Build, link and ship external library with the project + You could need to include an external library that isn't shipped in the platform. Then you have to bundle the required library in the `lib` widget directory. @@ -114,9 +116,13 @@ add_dependencies(${TARGET_NAME} ${MXML}) Here we define an external project that drive the build of the library then we define new CMake target of type **IMPORTED**. Meaning that this target hasn't -be built using CMake but is available at the location defined in the target +been built using CMake but is available at the location defined in the target property *IMPORTED_LOCATION*. +You could want to build the library as *SHARED* or *STATIC* depending on your needs +and goals. Then you only have to modify the external project configure step and change +filename used by **IMPORTED** library target defined after external project. + Then target *LABELS* property is set to **LIBRARY** to ship it in the widget. Unicens project also need some header from this library, so we use the target @@ -125,6 +131,31 @@ to that imported target, it can access to the include directories. We bound the target to the external project using a CMake dependency at last. +Then this target could be use like any other CMake target and be linked etc. + +### Only link and ship external library with the project + +If you already have a binary version of the library that you want to use and you +can't or don't want to build the library then you only have to add an **IMPORTED** +library target. + +So, taking the above example, `mxml` library inclusion would be: + +```cmake +PROJECT_TARGET_ADD(mxml) + +add_library(${TARGET_NAME} SHARED IMPORTED GLOBAL) + +SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES + LABELS LIBRARY + IMPORTED_LOCATION /path/to/library/libmxml.so.1 + INTERFACE_INCLUDE_DIRECTORIES /path/to/mxml/include/dir +) +``` + +Finally, you can link any other lib or executable target with this imported +library like any other target. + ## Macro reference ### PROJECT_TARGET_ADD diff --git a/docs/dev_guide/4_advanced_customization.md b/docs/dev_guide/4_advanced_customization.md index 6c12fb8..30c704e 100644 --- a/docs/dev_guide/4_advanced_customization.md +++ b/docs/dev_guide/4_advanced_customization.md @@ -32,7 +32,6 @@ set(VARIABLE_NAME 'value string random' CACHE STRING 'docstring') ### OS custom cmake files - This is meant to personalize the project depending on the OS your are using. At the end of config.cmake, common.cmake will include lot of cmake file to customize project build depending on your plateform. It will detect your OS -- cgit 1.2.3-korg