From 87e583672869cc239d6d19727563ea875b053e1e 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 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'docs/dev_guide/3_advanced_usage.md') 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 -- cgit 1.2.3-korg