forked from johannes-graeter/momo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
104 lines (95 loc) · 3.27 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
96
97
98
99
100
101
102
103
104
#pkg_version=1.4.1
cmake_minimum_required(VERSION 2.8.3)
project(momo)
###################
## find packages ##
###################
find_package(mrt_cmake_modules REQUIRED)
include(UseMrtStdCompilerFlags)
include(UseMrtAutoTarget)
include(GatherDeps)
#remove libs, which cannot be found automatically
#list(REMOVE_ITEM DEPENDEND_PACKAGES <package name 1> <package name 2> ...)
find_package(AutoDeps REQUIRED COMPONENTS ${DEPENDEND_PACKAGES})
#manually resolve removed dependend packages
#find_package(...)
############################
## read source code files ##
############################
file(GLOB_RECURSE PROJECT_HEADER_FILES_INC RELATIVE "${CMAKE_CURRENT_LIST_DIR}" "include/*.h" "include/*.hpp")
file(GLOB PROJECT_SOURCE_FILES_INC RELATIVE "${CMAKE_CURRENT_LIST_DIR}" "src/*.h" "src/*.hpp")
file(GLOB PROJECT_SOURCE_FILES_SRC RELATIVE "${CMAKE_CURRENT_LIST_DIR}" "src/*.cpp")
if (PROJECT_SOURCE_FILES_SRC)
set(LIBRARY_NAME ${PROJECT_NAME})
endif()
###################################
## catkin specific configuration ##
###################################
# The catkin_package macro generates cmake config files for your package
# Declare things to be passed to dependent projects
# INCLUDE_DIRS: uncomment this if you package contains header files
# LIBRARIES: libraries you create in this project that dependent projects also need
# CATKIN_DEPENDS: catkin_packages dependent projects also need
# DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
INCLUDE_DIRS include ${mrt_EXPORT_INCLUDE_DIRS}
LIBRARIES ${LIBRARY_NAME} ${mrt_EXPORT_LIBRARIES}
CATKIN_DEPENDS ${catkin_EXPORT_DEPENDS}
)
###########
## Build ##
###########
# Add include and library directories
include_directories(
include/${LIBRARY_NAME}
${mrt_INCLUDE_DIRS}
${catkin_INCLUDE_DIRS}
)
link_directories(
${mrt_LIBRARY_DIRS}
)
if (PROJECT_SOURCE_FILES_SRC)
# Declare a cpp library
add_library(${LIBRARY_NAME}
${PROJECT_HEADER_FILES_INC}
${PROJECT_SOURCE_FILES_INC}
${PROJECT_SOURCE_FILES_SRC}
)
# Specify libraries to link a library or executable target against
target_link_libraries(${LIBRARY_NAME}
${catkin_LIBRARIES}
${mrt_LIBRARIES}
)
endif()
#############
## Install ##
#############
if (TARGET ${PROJECT_NAME})
# Mark library for installation
install(TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
endif()
# Mark c++ header files for installation
install(DIRECTORY include/${PROJECT_NAME}/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
)
#install(FILES
# res/test.png
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
#)
#############
## Testing ##
#############
# Add gtest based cpp test target and link libraries
if (CATKIN_ENABLE_TESTING)
file(GLOB PROJECT_TEST_FILES_SRC RELATIVE "${CMAKE_CURRENT_LIST_DIR}" "test/*.cpp")
foreach(PROJECT_TEST_FILE_SRC ${PROJECT_TEST_FILES_SRC})
get_filename_component(PROJECT_TEST_NAME ${PROJECT_TEST_FILE_SRC} NAME_WE)
catkin_add_gtest(${PROJECT_TEST_NAME}-test ${PROJECT_TEST_FILE_SRC})
target_link_libraries(${PROJECT_TEST_NAME}-test ${LIBRARY_NAME} ${catkin_LIBRARIES} ${mrt_LIBRARIES} gtest_main)
endforeach()
endif()