Staging targets¶
This module make libraries and executables build in this projects available to others projects.
-
¶
qi_stage_lib(target [DEPRECATED <deprecated> ...] [DEPENDS <depends> ...] [INCLUDE_DIRS <include_dirs> ...] [PATH_SUFFIXES <path_suffixes> ...] )
Arguments: - target – a target created with qi_create_lib
- DEPRECATED – specify a deprecated message. This message will be displayed each time another project use that lib.
- DEPENDS – if not given, ${TARGET}_DEPENDS will be guessed from the previous calls to qi_use_lib(). Use this (with care!) to override this behavior. One should list all the (public) “direct” dependencies and their (public) dependencies.
- INCLUDE_DIRS – if not given, ${TARGET}_INCLUDE_DIRS will be guessed from the previous calls to include_directories() Use this (with care!) to override this behavior.
- PATH_SUFFIXES – when your header is installed in foo/bar.h, but you still need to do #include <bar.h>, you can set PATH_SUFFIXES to ‘foo’. Be careful to test the install rules of your headers if you choose to do so.
Generate a ‘name’-config.cmake, allowing other project to find the library. Usage of the various arguments are a bit tricky, so please read Using qi_stage_lib before using them
-
¶
qi_stage_header_only_lib(name [DEPRECATED <deprecated> ...] [DEPENDS <depends> ...] [INCLUDE_DIRS <include_dirs> ...] [PATH_SUFFIXES <path_suffixes> ...] )
Arguments: - name – the name of the library, clients of the library can use
qi_use_lib(... NAME)
- DEPRECATED – specify a deprecated message. This message will be displayed each time another project use that lib.
- DEPENDS – if not given, ${NAME}_DEPENDS will be empty the previous calls to qi_use_lib().
- INCLUDE_DIRS – if not given, ${NAME}_INCLUDE_DIRS will be guessed from the previous calls to include_directories() Use this (with care!) to override this behavior.
- PATH_SUFFIXES – when your header is installed in foo/bar.h, but you still need to do #include <bar.h>, you can set PATH_SUFFIXES to ‘foo’. Be careful to test the install rules of your headers if you choose to do so.
Generate a ‘name’-config.cmake, allowing other projects to find the header-only library. If the library has some dependencies, use something like:
find_package(FOO) include_directories(${FOO_INCLUDE_DIRS}) qi_stage_header_only_lib(bar DEPENDS FOO)
- name – the name of the library, clients of the library can use
-
¶
qi_stage_bin(target)
Arguments: - target – the name of a target
Generate a ‘name’-config.cmake, allowing other projects to find the binary
Example
# in foo/CMakeLists.txt qi_create_bin(foo foo.cpp) qi_stage_bin(foo) # in bar/CMakeLists.txt: find_package(foo) # Do something with ${FOO_EXECUTABLE}
-
¶
qi_stage_cmake(module)
Arguments: - module – path to the module file, relative to CMAKE_CURRENT_SOURCE_DIR
stage a cmake file For instance, assuming you have a foo-config.cmake file containing my_awesome_function, you can do:
qi_stage_cmake("foo-config.cmake")
Then later, (in an other project, or in the same project):
find_package(foo) my_awesome_function()
-
¶
qi_stage_script(file_name [TRAMPOLINE] [PYTHON] [DEPENDS <depends> ...] )
Arguments: - file_name – Path to the script in source dir.
- TRAMPOLINE – If set, will generate a trampoline script in sdk binary dir. Use this flag if your script uses any element that is built.
- PYTHON – set if script is written in python
- DEPENDS – list of target or packages this script depends on. Used for trampoline script generation only.
Stage an executable script
Will stage a cmake file so that others can locate the script. Use like this:
qi_stage_script(src/myscript)
And in other projects:
find_package(myscript) use_script_in_function(${MYSCRIPT_EXECUTABLE})
-
¶
qi_use_lib(name [<remaining args> ...] [ASSUME_SYSTEM_INCLUDE] )
Arguments: - name – The target to add dependencies to.
- args (remaining) – dependencies
- ASSUME_SYSTEM_INCLUDE – Use
-isystem
for including dependencies. Useful for instance to ignore warnings coming from 3rd party headers.
Handles dependencies between projects.
Call find_package for you, then do all the include_directories and target_link_libraries that are needed.
Note
The name must be an existing target, so you must call
qi_use_lib
afterqi_create_bin
orqi_create_lib
You can however call
qi_use_lib
several times, for instance:qi_create_bin(foo) # ... qi_use_lib(foo bar) if(UNIX) qi_use_lib(foo PTHREAD) endif()
-
¶
qi_stage_dir(directory)
Arguments: - directory –
(optional): the directory to register, relative to CMAKE_CURRENT_SOURCE_DIR. Defaults to CMAKE_CURRENT_SOURCE_DIR
Make sure configuration and data files in the given directory can be found by
qi::findData()
in this project or any dependency
For this to work, configuration files should be in
etc
and data files inshare
Note that this function does not create any install rule, so you should call qi_install_data(share/... ) for the files to be found after your project is installed.
See Managing data
- directory –
-
¶
qi_add_bin_sdk(path)
Arguments: - path – : the path to the pre-compiled SDK
Register the given path as a CMAKE_PREFIX_PATH.
Used when pre-compiled binaries are put under version control.
Note that the pre-compiled SDK must have the following layout:
lib libfoo.so include foo foo.h share cmake foo foo-config.cmake