Refactor cmake files
This commit is contained in:
parent
3a607544bf
commit
ddd41c1b6e
2 changed files with 80 additions and 78 deletions
150
CMakeLists.txt
150
CMakeLists.txt
|
@ -1,30 +1,31 @@
|
||||||
# After installation this project can be found by 'find_package(... CONFIG)' command:
|
# After installation this project can be found by 'find_package' command:
|
||||||
#
|
#
|
||||||
# find_package(libcreate CONFIG REQUIRED)
|
# find_package(libcreate REQUIRED)
|
||||||
# target_link_libraries(... libcreate::create)
|
# include_directores(${libcreate_INCLUDE_DIRS})
|
||||||
|
# target_link_libraries(... ${libcreate_LIBRARIES})
|
||||||
#
|
#
|
||||||
# Reference for this file:
|
|
||||||
# https://github.com/forexample/package-example/blob/cf2ea1d6a209fb9eca2ab83fdd0ac15fe4d3e807/Foo/CMakeLists.txt
|
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.8.12)
|
cmake_minimum_required(VERSION 2.8.12)
|
||||||
project(libcreate)
|
project(libcreate)
|
||||||
|
|
||||||
set(package_version 1.4.0)
|
set(PACKAGE_VERSION 1.5.0)
|
||||||
|
|
||||||
find_package(Boost REQUIRED system thread)
|
find_package(Boost REQUIRED COMPONENTS system thread)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
#########
|
#########
|
||||||
# Build #
|
# Build #
|
||||||
#########
|
#########
|
||||||
|
|
||||||
|
set(LIBRARY_NAME create)
|
||||||
|
|
||||||
# Specify locations of header files
|
# Specify locations of header files
|
||||||
include_directories(
|
include_directories(
|
||||||
include
|
include
|
||||||
)
|
)
|
||||||
|
|
||||||
# Declare cpp library
|
# Declare cpp library
|
||||||
add_library(create SHARED
|
add_library(${LIBRARY_NAME} SHARED
|
||||||
src/create.cpp
|
src/create.cpp
|
||||||
src/serial.cpp
|
src/serial.cpp
|
||||||
src/serial_stream.cpp
|
src/serial_stream.cpp
|
||||||
|
@ -34,26 +35,18 @@ add_library(create SHARED
|
||||||
src/types.cpp
|
src/types.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
# Global includes. Used by all targets
|
|
||||||
# * header can be included by C++ code `#include <create/create.h>`
|
|
||||||
target_include_directories(
|
|
||||||
create PUBLIC
|
|
||||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
|
|
||||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Manually link to thread library for build on ARM
|
# Manually link to thread library for build on ARM
|
||||||
if(THREADS_HAVE_PTHREAD_ARG)
|
if(THREADS_HAVE_PTHREAD_ARG)
|
||||||
set_property(TARGET create PROPERTY COMPILE_OPTIONS "-pthread")
|
set_property(TARGET ${LIBRARY_NAME} PROPERTY COMPILE_OPTIONS "-pthread")
|
||||||
set_property(TARGET create PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread")
|
set_property(TARGET ${LIBRARY_NAME} PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_THREAD_LIBS_INIT)
|
if(CMAKE_THREAD_LIBS_INIT)
|
||||||
target_link_libraries(create "${CMAKE_THREAD_LIBS_INIT}")
|
target_link_libraries(${LIBRARY_NAME} "${CMAKE_THREAD_LIBS_INIT}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Link to Boost
|
# Link to Boost
|
||||||
target_link_libraries(create
|
target_link_libraries(${LIBRARY_NAME}
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -65,90 +58,93 @@ add_executable(odom_example examples/odom_example.cpp)
|
||||||
# Specify libraries to link executable targets against
|
# Specify libraries to link executable targets against
|
||||||
target_link_libraries(create_demo
|
target_link_libraries(create_demo
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
create
|
${LIBRARY_NAME}
|
||||||
)
|
)
|
||||||
target_link_libraries(bumper_example
|
target_link_libraries(bumper_example
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
create
|
${LIBRARY_NAME}
|
||||||
)
|
)
|
||||||
target_link_libraries(odom_example
|
target_link_libraries(odom_example
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
create
|
${LIBRARY_NAME}
|
||||||
|
)
|
||||||
|
|
||||||
|
#################
|
||||||
|
# Configuration #
|
||||||
|
#################
|
||||||
|
|
||||||
|
# Install directories layout:
|
||||||
|
# * <prefix>/lib/
|
||||||
|
# * <prefix>/bin/
|
||||||
|
# * <prefix>/include/
|
||||||
|
# * <prefix>/lib/cmake/<PROJECT-NAME>
|
||||||
|
# * <prefix>/share/<PROJECT_NAME>
|
||||||
|
set(LIB_INSTALL_DIR "lib")
|
||||||
|
set(BIN_INSTALL_DIR "bin")
|
||||||
|
set(INCLUDE_INSTALL_DIR "include")
|
||||||
|
set(CONFIG_INSTALL_DIR "${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}")
|
||||||
|
set(SHARE_INSTALL_DIR "share/${PROJECT_NAME}")
|
||||||
|
|
||||||
|
set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
|
||||||
|
set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}-config-version.cmake")
|
||||||
|
set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}-config.cmake")
|
||||||
|
set(TARGETS_EXPORT_NAME "${PROJECT_NAME}-targets")
|
||||||
|
|
||||||
|
include(CMakePackageConfigHelpers)
|
||||||
|
|
||||||
|
# Configure '<PROJECT-NAME>-config-version.cmake'
|
||||||
|
write_basic_package_version_file(
|
||||||
|
"${VERSION_CONFIG}"
|
||||||
|
VERSION "${PACKAGE_VERSION}"
|
||||||
|
COMPATIBILITY SameMajorVersion
|
||||||
|
)
|
||||||
|
|
||||||
|
# Configure '<PROJECT-NAME>-config.cmake'
|
||||||
|
configure_package_config_file(
|
||||||
|
"config.cmake.in"
|
||||||
|
"${PROJECT_CONFIG}"
|
||||||
|
INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}"
|
||||||
|
PATH_VARS
|
||||||
|
INCLUDE_INSTALL_DIR
|
||||||
|
LIBRARY_NAME
|
||||||
)
|
)
|
||||||
|
|
||||||
###########
|
###########
|
||||||
# Install #
|
# Install #
|
||||||
###########
|
###########
|
||||||
|
|
||||||
# Layout. This works for all platforms:
|
|
||||||
# * <prefix>/lib/cmake/<PROJECT-NAME>
|
|
||||||
# * <prefix>/lib/
|
|
||||||
# * <prefix>/include/
|
|
||||||
set(config_install_dir "lib/cmake/${PROJECT_NAME}")
|
|
||||||
set(include_install_dir "include")
|
|
||||||
|
|
||||||
set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
set(version_config "${generated_dir}/${PROJECT_NAME}-config-version.cmake")
|
|
||||||
set(project_config "${generated_dir}/${PROJECT_NAME}-config.cmake")
|
|
||||||
set(targets_export_name "${PROJECT_NAME}-targets")
|
|
||||||
set(namespace "${PROJECT_NAME}::")
|
|
||||||
|
|
||||||
# Include module with function 'write_basic_package_version_file'
|
|
||||||
include(CMakePackageConfigHelpers)
|
|
||||||
|
|
||||||
# Configure '<PROJECT-NAME>-config-version.cmake'
|
|
||||||
write_basic_package_version_file(
|
|
||||||
"${version_config}"
|
|
||||||
VERSION "${package_version}"
|
|
||||||
COMPATIBILITY SameMajorVersion
|
|
||||||
)
|
|
||||||
|
|
||||||
# Configure '<PROJECT-NAME>-config.cmake'
|
|
||||||
# Use variables:
|
|
||||||
# * targets_export_name
|
|
||||||
# * PROJECT_NAME
|
|
||||||
configure_package_config_file(
|
|
||||||
"config.cmake.in"
|
|
||||||
"${project_config}"
|
|
||||||
INSTALL_DESTINATION "${config_install_dir}"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Install targets
|
# Install targets
|
||||||
install(
|
install(
|
||||||
TARGETS create
|
TARGETS ${LIBRARY_NAME}
|
||||||
EXPORT "${targets_export_name}"
|
EXPORT "${TARGETS_EXPORT_NAME}"
|
||||||
ARCHIVE DESTINATION "lib"
|
LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
|
||||||
LIBRARY DESTINATION "lib"
|
ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
|
||||||
RUNTIME DESTINATION "bin"
|
RUNTIME DESTINATION "${BIN_INSTALL_DIR}"
|
||||||
INCLUDES DESTINATION "${include_install_dir}"
|
INCLUDES DESTINATION "${INCLUDE_INSTALL_DIR}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Install headers
|
# Install headers
|
||||||
install(DIRECTORY include/create
|
install(
|
||||||
DESTINATION include
|
DIRECTORY include/
|
||||||
|
DESTINATION ${INCLUDE_INSTALL_DIR}
|
||||||
FILES_MATCHING PATTERN "*.h"
|
FILES_MATCHING PATTERN "*.h"
|
||||||
PATTERN ".svn" EXCLUDE
|
PATTERN ".svn" EXCLUDE
|
||||||
)
|
)
|
||||||
|
|
||||||
# Install config
|
# Install config
|
||||||
# * <prefix>/lib/cmake/libcreate/libcreate-config.cmake
|
|
||||||
# * <prefix>/lib/cmake/libcreate/libcreate-config-version.cmake
|
|
||||||
install(
|
install(
|
||||||
FILES "${project_config}" "${version_config}"
|
FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}"
|
||||||
DESTINATION "${config_install_dir}"
|
DESTINATION "${CONFIG_INSTALL_DIR}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Install config
|
# Install targets
|
||||||
# * <prefix>/lib/cmake/libcreate/libcreate-targets.cmake
|
|
||||||
install(
|
install(
|
||||||
EXPORT "${targets_export_name}"
|
EXPORT "${TARGETS_EXPORT_NAME}"
|
||||||
NAMESPACE "${namespace}"
|
DESTINATION "${CONFIG_INSTALL_DIR}"
|
||||||
DESTINATION "${config_install_dir}"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Install package.xml (for catkin)
|
# Install package.xml (for catkin)
|
||||||
install(FILES package.xml
|
install(
|
||||||
DESTINATION share/${PROJECT_NAME}
|
FILES package.xml
|
||||||
|
DESTINATION ${SHARE_INSTALL_DIR}
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,4 +1,10 @@
|
||||||
@PACKAGE_INIT@
|
@PACKAGE_INIT@
|
||||||
|
find_package(Boost REQUIRED COMPONENTS system thread)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake")
|
include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake")
|
||||||
|
set_and_check(libcreate_INCLUDE_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@")
|
||||||
|
list(APPEND libcreate_INCLUDE_DIRS "${Boost_INCLUDE_DIRS}")
|
||||||
|
set(libcreate_LIBRARIES "@LIBRARY_NAME@")
|
||||||
|
list(APPEND libcreate_LIBRARIES "${Boost_LIBRARIES}")
|
||||||
check_required_components("@PROJECT_NAME@")
|
check_required_components("@PROJECT_NAME@")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue