-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathCMakeLists.txt
95 lines (83 loc) · 3.17 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
cmake_minimum_required(VERSION 3.5.0)
# Extract package name and version
find_package(ros_industrial_cmake_boilerplate REQUIRED)
extract_package_metadata(pkg)
project(${pkg_extracted_name} VERSION ${pkg_extracted_version} LANGUAGES CXX)
include(cmake/opw_kinematics_macros.cmake)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
find_package(Eigen3 REQUIRED)
if(NOT EIGEN3_INCLUDE_DIRS)
set(EIGEN3_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR})
endif()
# Load variable for clang tidy args, compiler options and cxx version
opw_variables()
if(NOT MSVC)
initialize_code_coverage(ENABLE ${OPW_ENABLE_CODE_COVERAGE})
add_code_coverage_all_targets(ENABLE ${OPW_ENABLE_CODE_COVERAGE})
endif()
# Create interface target
add_library(${PROJECT_NAME} INTERFACE)
target_compile_definitions(${PROJECT_NAME} INTERFACE ${OPW_COMPILE_DEFINITIONS})
target_link_libraries(${PROJECT_NAME} INTERFACE)
target_cxx_version(${PROJECT_NAME} INTERFACE VERSION ${OPW_CXX_VERSION})
target_compile_options(${PROJECT_NAME} INTERFACE ${OPW_COMPILE_OPTIONS_PUBLIC})
target_clang_tidy(${PROJECT_NAME} ENABLE ${OPW_ENABLE_CLANG_TIDY} ARGUMENTS ${OPW_CLANG_TIDY_ARGS})
target_code_coverage(
${PROJECT_NAME}
INTERFACE
ALL
ENABLE ${OPW_ENABLE_CODE_COVERAGE})
target_include_directories(${PROJECT_NAME} INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
"$<INSTALL_INTERFACE:include>")
target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE ${EIGEN3_INCLUDE_DIRS})
# Create test executable
add_executable(${PROJECT_NAME}_node src/test.cpp)
target_link_libraries(${PROJECT_NAME}_node PRIVATE ${PROJECT_NAME})
set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
target_cxx_version(${PROJECT_NAME}_node PRIVATE VERSION ${OPW_CXX_VERSION})
target_compile_options(${PROJECT_NAME}_node PRIVATE ${OPW_COMPILE_OPTIONS_PRIVATE})
target_clang_tidy(${PROJECT_NAME}_node ENABLE ${OPW_ENABLE_CLANG_TIDY})
target_include_what_you_use(${PROJECT_NAME}_node ENABLE ${OPW_ENABLE_TESTING} ARGUMENTS ${DEFAULT_IWYU_ARGS})
target_cppcheck(${PROJECT_NAME}_node ENABLE ${OPW_ENABLE_TESTING} ARGUMENTS ${DEFAULT_CPPCHECK_ARGS})
target_code_coverage(
${PROJECT_NAME}_node
PRIVATE
ALL
ENABLE ${OPW_ENABLE_CODE_COVERAGE})
# Install
configure_package(NAMESPACE opw_kinematics TARGETS ${PROJECT_NAME} DEPENDENCIES Eigen3)
# Mark cpp header files for installation
install(
DIRECTORY include/${PROJECT_NAME}
DESTINATION include
FILES_MATCHING
PATTERN "*.h"
PATTERN "*.hpp"
PATTERN "*.hxx"
PATTERN ".svn" EXCLUDE)
install(FILES "${CMAKE_CURRENT_LIST_DIR}/cmake/opw_kinematics_macros.cmake" DESTINATION lib/cmake/${PROJECT_NAME})
# Testing
if(OPW_ENABLE_TESTING)
enable_testing()
add_run_tests_target(ENABLE ${OPW_ENABLE_RUN_TESTING})
add_subdirectory(test)
endif()
if(OPW_PACKAGE)
cpack(
VERSION
${pkg_extracted_version}
MAINTAINER
<https://github.com/Jmeyer1292/opw_kinematics>
VENDOR
"ROS-Industrial"
DESCRIPTION
"${PROJECT_NAME}"
LICENSE_FILE
${CMAKE_CURRENT_LIST_DIR}/LICENSE
README_FILE
${CMAKE_CURRENT_LIST_DIR}/Readme.md
LINUX_DEPENDS
"libeigen3-dev"
WINDOWS_DEPENDS
"Eigen")
endif()