1
- cmake_minimum_required (VERSION 3.1 )
1
+ cmake_minimum_required (VERSION 3.5 )
2
2
project (apriltag VERSION 3.3.0 LANGUAGES C CXX )
3
3
4
+ if (MSVC )
5
+ add_compile_definitions ("_CRT_SECURE_NO_WARNINGS" )
6
+ endif ()
7
+
4
8
if (POLICY CMP0077 )
5
9
cmake_policy (SET CMP0077 NEW )
6
10
endif ()
11
+
7
12
option (BUILD_SHARED_LIBS "Build shared libraries" ON )
13
+ option (BUILD_EXAMPLES "Build example binaries" ON )
8
14
option (ASAN "Use AddressSanitizer for debug builds to detect memory issues" OFF )
9
15
10
16
if (ASAN )
@@ -38,150 +44,20 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
38
44
set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" )
39
45
endif ()
40
46
41
- aux_source_directory (common COMMON_SRC )
42
- set (APRILTAG_SRCS apriltag.c apriltag_pose.c apriltag_quad_thresh.c )
43
-
44
- # Library
45
- file (GLOB TAG_FILES ${CMAKE_CURRENT_SOURCE_DIR} /tag*.c )
46
- add_library (${PROJECT_NAME} ${APRILTAG_SRCS} ${COMMON_SRC} ${TAG_FILES} )
47
-
48
- if (MSVC )
49
- add_compile_definitions ("_CRT_SECURE_NO_WARNINGS" )
50
- else ()
51
- find_package (Threads REQUIRED )
52
- target_link_libraries (${PROJECT_NAME} PUBLIC Threads::Threads m )
53
- endif ()
54
-
55
- set_target_properties (${PROJECT_NAME} PROPERTIES SOVERSION 3 VERSION ${PROJECT_VERSION} )
56
- set_target_properties (${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "d" )
57
-
58
- include (GNUInstallDirs )
59
- target_include_directories (${PROJECT_NAME} PUBLIC
60
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} />"
61
- "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >"
62
- "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >/apriltag" )
63
-
64
-
65
- # install header file hierarchy
66
- file (GLOB HEADER_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h common/*.h )
67
- list (REMOVE_ITEM HEADER_FILES apriltag_detect.docstring.h apriltag_py_type.docstring.h )
68
-
69
- foreach (HEADER ${HEADER_FILES} )
70
- string (REGEX MATCH "(.*)[/\\ ]" DIR ${HEADER} )
71
- install (FILES ${HEADER} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /${PROJECT_NAME}/${DIR} )
72
- endforeach ()
73
-
74
- # export library
75
- set (generated_dir "${CMAKE_CURRENT_BINARY_DIR} /generated" )
76
- set (version_config "${generated_dir} /${PROJECT_NAME} ConfigVersion.cmake" )
77
- set (project_config "${generated_dir} /${PROJECT_NAME} Config.cmake" )
78
- set (targets_export_name "${PROJECT_NAME} Targets" )
79
- set (config_install_dir "share/${PROJECT_NAME} /cmake" )
80
-
81
- # Include module with fuction 'write_basic_package_version_file'
82
- include (CMakePackageConfigHelpers )
83
-
84
- # Configure '<PROJECT-NAME>Config.cmake'
85
- # Use variables:
86
- # * targets_export_name
87
- # * PROJECT_NAME
88
- configure_package_config_file (
89
- "CMake/apriltagConfig.cmake.in"
90
- "${project_config} "
91
- INSTALL_DESTINATION "${config_install_dir} "
92
- )
47
+ # build main library
48
+ add_subdirectory (libs/apriltag )
93
49
94
- # Configure '<PROJECT-NAME>ConfigVersion.cmake'
95
- # Note: PROJECT_VERSION is used as a VERSION
96
- write_basic_package_version_file ("${version_config} " COMPATIBILITY SameMajorVersion )
97
-
98
-
99
- # install library
100
- install (TARGETS ${PROJECT_NAME} EXPORT ${targets_export_name}
101
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
102
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
103
- )
104
-
105
- install (EXPORT ${targets_export_name}
106
- NAMESPACE apriltag::
107
- DESTINATION ${config_install_dir} )
108
-
109
- install (FILES ${project_config} ${version_config} DESTINATION ${config_install_dir} )
110
-
111
- export (TARGETS apriltag
112
- NAMESPACE apriltag::
113
- FILE ${generated_dir} /${targets_export_name}.cmake )
114
-
115
-
116
- # install pkgconfig file
117
- configure_file (${PROJECT_NAME} .pc.in ${PROJECT_NAME} .pc @ONLY )
118
- install (FILES "${CMAKE_BINARY_DIR} /${PROJECT_NAME} .pc"
119
- DESTINATION "${CMAKE_INSTALL_LIBDIR} /pkgconfig" )
120
-
121
-
122
- # Python wrapper
50
+ ## Python wrapper
123
51
include (CMakeDependentOption )
124
52
cmake_dependent_option (BUILD_PYTHON_WRAPPER "Builds Python wrapper" ON BUILD_SHARED_LIBS OFF )
125
53
126
54
if (BUILD_PYTHON_WRAPPER )
127
- SET (Python_ADDITIONAL_VERSIONS 3 )
128
- find_package (PythonLibs )
129
- execute_process (COMMAND which python3 OUTPUT_QUIET RESULT_VARIABLE Python3_NOT_FOUND )
130
- execute_process (COMMAND python3 -c "import numpy" RESULT_VARIABLE Numpy_NOT_FOUND )
131
- endif (BUILD_PYTHON_WRAPPER )
132
-
133
- if (NOT Python3_NOT_FOUND AND NOT Numpy_NOT_FOUND AND PYTHONLIBS_FOUND AND BUILD_PYTHON_WRAPPER )
134
- # TODO deal with both python2/3
135
- execute_process (COMMAND python3 ${CMAKE_CURRENT_SOURCE_DIR} /python_build_flags.py OUTPUT_VARIABLE PY_OUT )
136
- set (PY_VARS CFLAGS LDFLAGS LINKER EXT_SUFFIX )
137
- cmake_parse_arguments (PY "" "${PY_VARS} " "" ${PY_OUT} )
138
- separate_arguments (PY_CFLAGS )
139
- list (REMOVE_ITEM PY_CFLAGS -flto )
140
- separate_arguments (PY_LDFLAGS )
141
-
142
- foreach (X detect py_type )
143
- add_custom_command (OUTPUT ${PROJECT_BINARY_DIR} /apriltag_${X}.docstring.h
144
- COMMAND < ${CMAKE_CURRENT_SOURCE_DIR} /apriltag_${X}.docstring sed 's/\" /\\\\\" /g\; s/^/\" /\; s/$$/\\\\ n\" /\; ' > apriltag_${X}.docstring.h
145
- WORKING_DIRECTORY ${PROJECT_BINARY_DIR} )
146
- endforeach ()
147
-
148
- add_custom_command (OUTPUT apriltag_pywrap.o
149
- COMMAND ${CMAKE_C_COMPILER} ${PY_CFLAGS} -I${PROJECT_BINARY_DIR} -c -o apriltag_pywrap.o ${CMAKE_CURRENT_SOURCE_DIR} /apriltag_pywrap.c
150
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /apriltag_pywrap.c ${PROJECT_BINARY_DIR} /apriltag_detect.docstring.h ${PROJECT_BINARY_DIR} /apriltag_py_type.docstring.h )
151
- add_custom_command (OUTPUT apriltag${PY_EXT_SUFFIX}
152
- COMMAND ${PY_LINKER} ${PY_LDFLAGS} -Wl,-rpath,lib apriltag_pywrap.o $< TARGET_FILE:apriltag> -o apriltag${PY_EXT_SUFFIX}
153
- DEPENDS ${PROJECT_NAME} apriltag_pywrap.o )
154
- add_custom_target (apriltag_python ALL
155
- DEPENDS apriltag${PY_EXT_SUFFIX} )
156
-
157
- execute_process (COMMAND python3 -m site --user-site OUTPUT_VARIABLE PY_DEST )
158
- string (STRIP ${PY_DEST} PY_DEST )
159
- install (FILES ${PROJECT_BINARY_DIR} /apriltag${PY_EXT_SUFFIX} DESTINATION ${PY_DEST} )
160
- endif (NOT Python3_NOT_FOUND AND NOT Numpy_NOT_FOUND AND PYTHONLIBS_FOUND AND BUILD_PYTHON_WRAPPER )
55
+ # build python wrapper
56
+ add_subdirectory (libs/apriltag_python )
57
+ endif ()
161
58
162
59
# Examples
163
- # apriltag_demo
164
- add_executable (apriltag_demo example/apriltag_demo.c )
165
- target_link_libraries (apriltag_demo ${PROJECT_NAME} )
166
-
167
- # opencv_demo
168
- set (_OpenCV_REQUIRED_COMPONENTS core imgproc videoio highgui )
169
- find_package (OpenCV COMPONENTS ${_OpenCV_REQUIRED_COMPONENTS} QUIET CONFIG )
170
- if (OpenCV_FOUND )
171
- # NB: contrib required for TickMeter in OpenCV 2.4. This is only required for 16.04 backwards compatibility and can be removed in the future.
172
- # If we add it to the find_package initially, the demo won't build for newer OpenCV versions
173
- if (OpenCV_VERSION VERSION_LESS "3.0.0" )
174
- list (APPEND _OpenCV_REQUIRED_COMPONENTS contrib )
175
- find_package (OpenCV COMPONENTS ${_OpenCV_REQUIRED_COMPONENTS} CONFIG )
176
- endif ()
177
-
178
- add_executable (opencv_demo example/opencv_demo.cc )
179
- target_link_libraries (opencv_demo apriltag ${OpenCV_LIBRARIES} )
180
- set_target_properties (opencv_demo PROPERTIES CXX_STANDARD 11 )
181
- install (TARGETS opencv_demo RUNTIME DESTINATION bin )
182
- else ()
183
- message (STATUS "OpenCV not found: Not building demo" )
184
- endif (OpenCV_FOUND )
185
-
186
- # install example programs
187
- install (TARGETS apriltag_demo RUNTIME DESTINATION bin )
60
+ if (BUILD_EXAMPLES )
61
+ # build examples
62
+ add_subdirectory (example )
63
+ endif ()
0 commit comments