This new structure provides several benefits:
* Allows us to install multiple CMake projects in the same destination
dir (without include path conflicts).
- This makes shipping the trading algo sdk a trivial excercise. Simply
copy the lib and include dirs from the install dest. That's it!
* Puts us in a position to break up the monolithic libspark into smaller
modules, which are easier to manage.
40 lines
1.1 KiB
CMake
40 lines
1.1 KiB
CMake
include_guard(DIRECTORY)
|
|
include(GNUInstallDirs)
|
|
include(${CMAKE_SOURCE_DIR}/cmake/PackBasic.cmake)
|
|
include(${CMAKE_SOURCE_DIR}/cmake/SetFirstDefined.cmake)
|
|
|
|
function(install_basic)
|
|
set(_options)
|
|
set(_one_value_args NAME INCLUDE_DIR)
|
|
set(_multi_value_args)
|
|
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
|
|
set_first_defined(_name _ARGS_NAME PROJECT_NAME)
|
|
set_first_defined(_include_dir _ARGS_INCLUDE_DIR _name)
|
|
|
|
file(
|
|
GLOB_RECURSE ${_name}_HEADERS
|
|
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
|
|
${_include_dir}/*.h)
|
|
|
|
target_sources(${_name}
|
|
PUBLIC
|
|
FILE_SET HEADERS FILES ${${_name}_HEADERS})
|
|
|
|
install(
|
|
TARGETS ${_name}
|
|
EXPORT ${_name}Targets
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
)
|
|
|
|
install(
|
|
EXPORT ${_name}Targets
|
|
FILE ${_name}Targets.cmake
|
|
NAMESPACE ${_name}::
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${_name})
|
|
|
|
pack_basic()
|
|
endfunction()
|