mirror of
https://github.com/OpenCMT/uLib.git
synced 2025-12-06 07:21:31 +01:00
181 lines
5.2 KiB
CMake
181 lines
5.2 KiB
CMake
|
|
include(uLibMacros)
|
|
include_guard(ULIB_TARGET_MACRO_CMAKE)
|
|
|
|
## adds library target
|
|
macro(uLib_add_library name)
|
|
add_library(${name} ${ARGN})
|
|
if(NOT ULIB_INSTALL_NO_LIBRARIES)
|
|
set_property(GLOBAL APPEND PROPERTY ULIB_TARGETS ${name})
|
|
endif(NOT ULIB_INSTALL_NO_LIBRARIES)
|
|
endmacro(uLib_add_library)
|
|
|
|
################################################################################
|
|
## Add SHARED library target ##
|
|
|
|
# HEADERS and SOURCES must be defined as list of library headers and sources
|
|
macro(uLib_add_shared_library name)
|
|
if(COMMAND cmake_policy)
|
|
# cmake_policy( SET CMP0022 NEW )
|
|
endif(COMMAND cmake_policy)
|
|
|
|
set(mname ${PACKAGE_LIBPREFIX}${name})
|
|
|
|
if(SOURCES)
|
|
uLib_add_library(${mname} SHARED ${SOURCES})
|
|
set(shared ${ULIB_SHARED_LIBRARIES})
|
|
list(APPEND shared ${mname})
|
|
set(ULIB_SHARED_LIBRARIES ${shared} PARENT_SCOPE)
|
|
source_group("${project_name}\\${name}" FILES ${SOURCES})
|
|
set_target_properties(${mname} PROPERTIES
|
|
VERSION ${PROJECT_VERSION}
|
|
SOVERSION ${PROJECT_SOVERSION}
|
|
# INTERFACE_LINK_LIBRARIES "${LIBRARIES}"
|
|
# LINK_INTERFACE_LIBRARIES "${LIBRARIES}" ## <- ok for cmake from 2.12 ?
|
|
# IMPORTED_LINK_INTERFACE_LIBRARIES "${LIBRARIES}" ## <- breaks cmake after 2.11 ?
|
|
# PUBLIC_HEADER ""
|
|
)
|
|
debug(LIBRARIES)
|
|
|
|
target_link_libraries(${mname} ${LIBRARIES})
|
|
|
|
install(TARGETS ${mname}
|
|
EXPORT "${PROJECT_NAME}Targets"
|
|
RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin
|
|
LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib
|
|
# PUBLIC_HEADER DESTINATION ${INSTALL_INC_DIR} COMPONENT dev
|
|
)
|
|
endif(SOURCES)
|
|
|
|
if(HEADERS)
|
|
foreach(header ${HEADERS})
|
|
install(FILES ${header} DESTINATION ${INSTALL_INC_DIR}/${name})
|
|
endforeach(header)
|
|
endif(HEADERS)
|
|
|
|
endmacro(uLib_add_shared_library)
|
|
|
|
|
|
################################################################################
|
|
## Add Target ##
|
|
|
|
macro(uLib_add_target name)
|
|
debug(${name})
|
|
add_executable(${name} ${ARGN})
|
|
set_property(GLOBAL APPEND PROPERTY ULIB_TARGETS ${name})
|
|
|
|
set(exported ${ULIB_EXPORTED_TARGETS})
|
|
list(APPEND exported ${name})
|
|
set(ULIB_EXPORTED_TARGETS ${exported} PARENT_SCOPE)
|
|
|
|
install(TARGETS ${name}
|
|
EXPORT "${PROJECT_NAME}Targets"
|
|
RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin
|
|
)
|
|
ENDMACRO(uLib_add_target)
|
|
|
|
|
|
|
|
################################################################################
|
|
## TESTS ##
|
|
|
|
# TESTS and LIBRARIES must be defined
|
|
macro(uLib_add_tests name)
|
|
foreach(tn ${TESTS})
|
|
add_executable(${tn} EXCLUDE_FROM_ALL ${tn}.cpp)
|
|
add_test(NAME ${tn} COMMAND ${tn})
|
|
|
|
target_link_libraries(${tn} ${LIBRARIES})
|
|
|
|
endforeach(tn)
|
|
|
|
# custom target to compile all tests
|
|
add_custom_target(all-${name}-tests)
|
|
add_dependencies(all-${name}-tests ${TESTS})
|
|
endmacro(uLib_add_tests name)
|
|
|
|
|
|
################################################################################
|
|
## UTILS ##
|
|
|
|
# UTILS and LIBRARIES must be defined
|
|
macro(uLib_add_utils name)
|
|
foreach(tn ${UTILS})
|
|
add_executable(${tn} ${tn}.cpp)
|
|
install(TARGETS ${tn} RUNTIME DESTINATION bin)
|
|
|
|
# adds dependencies to all selected modules in uLib
|
|
# foreach(module ${ULIB_SELECTED_MODULES})
|
|
# add_dependencies(${tn} ${project_name}${module})
|
|
# endforeach(module)
|
|
|
|
# adds libraries dependencies
|
|
foreach(library ${LIBRARIES})
|
|
target_link_libraries(${tn} ${library})
|
|
endforeach(library)
|
|
|
|
endforeach(tn)
|
|
|
|
# custom target to compile all tests
|
|
add_custom_target(all-${name})
|
|
add_dependencies(all-${name} ${UTILS})
|
|
|
|
endmacro(uLib_add_utils name)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function(get_gcc_compile_flags target out_flags)
|
|
string(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" name)
|
|
set(flags "${${name}} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_COMPILER_ARG1}")
|
|
get_target_property(value ${target} COMPILE_FLAGS)
|
|
if (value)
|
|
list(APPEND flags ${value})
|
|
endif()
|
|
get_target_property(value ${target} TYPE)
|
|
get_target_property(value ${target} COMPILE_DEFINITIONS)
|
|
if (value)
|
|
foreach(item ${value})
|
|
list(APPEND flags "-D${item}")
|
|
endforeach()
|
|
endif()
|
|
STRING(TOUPPER "COMPILE_DEFINITIONS_${CMAKE_BUILD_TYPE}" name)
|
|
get_target_property(value ${target} ${name})
|
|
if (value)
|
|
foreach(item ${value})
|
|
list(APPEND flags "-D${item}")
|
|
endforeach()
|
|
endif()
|
|
get_directory_property(value DEFINITIONS)
|
|
if (value)
|
|
list(APPEND flags ${value})
|
|
endif()
|
|
get_directory_property(value INCLUDE_DIRECTORIES)
|
|
if (value)
|
|
foreach(item ${value})
|
|
list(APPEND flags "-I${item}")
|
|
endforeach()
|
|
endif()
|
|
set(${out_flags} ${flags} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(get_gcc_link_flags target out_flags)
|
|
set(flags)
|
|
get_target_property(value ${target} LINK_FLAGS_RELEASE)
|
|
if (value)
|
|
message(STATUS "-> ${flags}")
|
|
list(APPEND flags ${value})
|
|
endif()
|
|
get_directory_property(value LINK_DIRECTORIES)
|
|
if (value)
|
|
message(STATUS "-> ${flags}")
|
|
foreach(item ${value})
|
|
list(APPEND flags "-L${item}")
|
|
endforeach()
|
|
endif()
|
|
message(STATUS "-> ${flags}")
|
|
set(${out_flags} ${flags} PARENT_SCOPE)
|
|
endfunction()
|