1
- cmake_minimum_required (VERSION 2.8 FATAL_ERROR)
2
-
3
- set (IGN_PROJECT_NAME "<project-name>" )
4
-
5
- project (ignition-${IGN_PROJECT_NAME} )
6
- string (TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
7
- string (TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
1
+ cmake_minimum_required (VERSION 3.5 FATAL_ERROR)
8
2
3
+ # Set the project name and version number here
4
+ set (IGN_PROJECT_NAME "project_name" )
9
5
set (PROJECT_MAJOR_VERSION 0)
10
6
set (PROJECT_MINOR_VERSION 1)
11
7
set (PROJECT_PATCH_VERSION 0)
12
8
9
+ #################################################
10
+ # Only change values below here if you know
11
+ # what you're doing
12
+ #################################################
13
+
14
+ project (ignition-${IGN_PROJECT_NAME}${PROJECT_MAJOR_VERSION} )
15
+
16
+ set (PROJECT_NAME_NO_VERSION "ignition-${IGN_PROJECT_NAME} " )
17
+ string (TOLOWER ${PROJECT_NAME_NO_VERSION} PROJECT_NAME_NO_VERSION_LOWER)
18
+ string (TOUPPER ${PROJECT_NAME_NO_VERSION} PROJECT_NAME_NO_VERSION_UPPER)
19
+ string (TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
20
+ string (TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
21
+ set (PROJECT_EXPORT_NAME ${PROJECT_NAME_LOWER} )
22
+ set (PROJECT_LIBRARY_TARGET_NAME ${PROJECT_NAME_LOWER} )
23
+
13
24
set (PROJECT_VERSION ${PROJECT_MAJOR_VERSION} .${PROJECT_MINOR_VERSION} )
14
- set (PROJECT_VERSION_FULL ${PROJECT_MAJOR_VERSION} .${PROJECT_MINOR_VERSION} .${PROJECT_PATCH_VERSION} )
25
+ set (PROJECT_VERSION_FULL
26
+ ${PROJECT_MAJOR_VERSION} .${PROJECT_MINOR_VERSION} .${PROJECT_PATCH_VERSION} )
15
27
16
- message (STATUS "${PROJECT_NAME } version ${PROJECT_VERSION_FULL} " )
28
+ message (STATUS "${PROJECT_NAME_NO_VERSION } version ${PROJECT_VERSION_FULL} " )
17
29
18
30
set (project_cmake_dir ${PROJECT_SOURCE_DIR} /cmake
19
31
CACHE PATH "Location of CMake scripts" )
20
32
21
33
include (${project_cmake_dir} /Utils.cmake)
34
+ include (CMakePackageConfigHelpers)
22
35
23
36
########################################
24
37
# Package Creation:
@@ -91,9 +104,10 @@ if(LD_LIBRARY_PATH)
91
104
endif ()
92
105
93
106
94
- set (INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR} /ignition" )
107
+ set (INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR} " )
108
+ set (INCLUDE_INSTALL_DIR_POSTFIX "ignition/${IGN_PROJECT_NAME}${PROJECT_MAJOR_VERSION} " )
109
+ set (INCLUDE_INSTALL_DIR_FULL "${INCLUDE_INSTALL_DIR} /${INCLUDE_INSTALL_DIR_POSTFIX} " )
95
110
set (LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} )
96
- set (LIB_INSTALL_DIR_ARCH_INDEPENDENT "lib/" )
97
111
set (BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} )
98
112
99
113
set (USE_FULL_RPATH OFF CACHE BOOL "Set to true to enable full rpath" )
@@ -167,26 +181,23 @@ endif()
167
181
unset (CMAKE_C_FLAGS_ALL CACHE )
168
182
unset (CMAKE_CXX_FLAGS CACHE )
169
183
170
- # USE_HOST_CFLAGS (default TRUE)
171
- # Will check building host machine for proper cflags
172
- if (NOT DEFINED USE_HOST_CFLAGS OR USE_HOST_CFLAGS)
173
- message (STATUS "Enable host CFlags" )
174
- include (${project_cmake_dir} /HostCFlags.cmake)
175
- endif ()
176
-
177
- # USE_UPSTREAM_CFLAGS (default TRUE)
178
- # Will use predefined ignition developers cflags
179
- if (NOT DEFINED USE_UPSTREAM_CFLAGS OR USE_UPSTREAM_CFLAGS)
180
- message (STATUS "Enable upstream CFlags" )
181
- include (${project_cmake_dir} /DefaultCFlags.cmake)
184
+ # Check if warning options are avaliable for the compiler and return WARNING_CXX_FLAGS variable
185
+ # MSVC generates tons of warnings on gtest code.
186
+ # Recommended to use /W4 instead of /Wall
187
+ if (MSVC )
188
+ set (WARN_LEVEL "/W4" )
189
+ else ()
190
+ set (WARN_LEVEL "-Wall" )
182
191
endif ()
183
192
184
- # Check if warning options are avaliable for the compiler and return WARNING_CXX_FLAGS variable
185
- filter_valid_compiler_warnings(-Wall -Wextra -Wno-long-long
193
+ filter_valid_compiler_warnings(${WARN_LEVEL} -Wextra -Wno-long-long
186
194
-Wno-unused-value -Wno-unused-value -Wno-unused-value -Wno-unused-value
187
195
-Wfloat-equal -Wshadow -Winit-self -Wswitch-default
188
196
-Wmissing-include -dirs -pedantic)
189
197
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}${WARNING_CXX_FLAGS} " )
198
+ if (DEFINED EXTRA_CMAKE_CXX_FLAGS)
199
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CMAKE_CXX_FLAGS} " )
200
+ endif ()
190
201
191
202
#################################################
192
203
# OS Specific initialization
@@ -231,16 +242,12 @@ else (build_errors)
231
242
232
243
########################################
233
244
# Write the config.hh file
234
- configure_file (${project_cmake_dir} /config.hh.in
235
- ${PROJECT_BINARY_DIR} /include /ignition/${IGN_PROJECT_NAME} /config.hh)
245
+ configure_file (" ${project_cmake_dir} /config.hh.in"
246
+ " ${PROJECT_BINARY_DIR} /include/ignition/${IGN_PROJECT_NAME} /config.hh" )
236
247
ign_install_includes(
237
- ${IGN_PROJECT_NAME}${PROJECT_MAJOR_VERSION} /ignition/${IGN_PROJECT_NAME}
238
- ${PROJECT_BINARY_DIR} /include /ignition/${IGN_PROJECT_NAME} /config.hh)
248
+ " ${INCLUDE_INSTALL_DIR_POSTFIX} /ignition/${IGN_PROJECT_NAME} "
249
+ " ${PROJECT_BINARY_DIR} /include/ignition/${IGN_PROJECT_NAME} /config.hh" )
239
250
240
- include_directories (
241
- ${PROJECT_SOURCE_DIR} /include
242
- ${PROJECT_BINARY_DIR} /include
243
- )
244
251
link_directories (${PROJECT_BINARY_DIR} /src)
245
252
246
253
if (DEFINED CMAKE_CXX_FLAGS )
@@ -260,25 +267,35 @@ else (build_errors)
260
267
261
268
########################################
262
269
# Make the package config files
263
- configure_file (
264
- ${CMAKE_SOURCE_DIR} /cmake/pkgconfig/ignition.in
265
- ${CMAKE_CURRENT_BINARY_DIR} /cmake/pkgconfig/${PROJECT_NAME_LOWER} .pc @ONLY)
266
- install (FILES ${CMAKE_CURRENT_BINARY_DIR} /cmake/pkgconfig/${PROJECT_NAME_LOWER} .pc
267
- DESTINATION ${LIB_INSTALL_DIR_ARCH_INDEPENDENT} /pkgconfig
268
- COMPONENT pkgconfig)
270
+ set (pkgconfig_files ${PROJECT_NAME_NO_VERSION_LOWER} )
271
+
272
+ foreach (pkgconfig ${pkgconfig_files} )
273
+ configure_file (${CMAKE_SOURCE_DIR} /cmake/pkgconfig/${pkgconfig} .in
274
+ ${CMAKE_CURRENT_BINARY_DIR} /cmake/pkgconfig/${pkgconfig}${PROJECT_MAJOR_VERSION} .pc @ONLY)
275
+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /cmake/pkgconfig/${pkgconfig}${PROJECT_MAJOR_VERSION} .pc
276
+ DESTINATION ${LIB_INSTALL_DIR} /pkgconfig COMPONENT pkgconfig)
277
+ endforeach ()
269
278
270
279
########################################
271
280
# Make the cmake config files
272
- set (PKG_NAME ${PROJECT_NAME_UPPER } )
273
- set (PKG_LIBRARIES ${PROJECT_NAME_LOWER}${PROJECT_MAJOR_VERSION} )
274
- set (cmake_conf_file "${PROJECT_NAME_LOWER}${PROJECT_MAJOR_VERSION} -config.cmake" )
275
- set (cmake_conf_version_file "${PROJECT_NAME_LOWER}${PROJECT_MAJOR_VERSION} -config-version .cmake" )
281
+ set (PKG_NAME ${PROJECT_NAME_NO_VERSION_UPPER } )
282
+ set (cmake_conf_file " ${PROJECT_NAME_LOWER} -config.cmake" )
283
+ set (cmake_conf_version_file "${PROJECT_NAME_LOWER} -config-version .cmake" )
284
+ set (cmake_targets_file "${PROJECT_NAME_LOWER} -targets .cmake" )
276
285
277
286
set (PKG_DEPENDS)
278
287
279
- configure_file (
280
- "${CMAKE_CURRENT_SOURCE_DIR} /cmake/${PROJECT_NAME_LOWER} -config.cmake.in"
281
- "${CMAKE_CURRENT_BINARY_DIR} /${cmake_conf_file} " @ONLY)
288
+ if (WIN32 AND NOT CYGWIN )
289
+ set (CMAKE_CONFIG_INSTALL_DIR CMake)
290
+ else ()
291
+ set (CMAKE_CONFIG_INSTALL_DIR ${LIB_INSTALL_DIR} /cmake/${PROJECT_NAME_LOWER} /)
292
+ endif ()
293
+
294
+ configure_package_config_file(
295
+ "${CMAKE_CURRENT_SOURCE_DIR} /cmake/ignition-config.cmake.in"
296
+ "${CMAKE_CURRENT_BINARY_DIR} /${cmake_conf_file} "
297
+ PATH_VARS LIB_INSTALL_DIR INCLUDE_INSTALL_DIR_FULL
298
+ INSTALL_DESTINATION ${CMAKE_CONFIG_INSTALL_DIR} )
282
299
283
300
# Use write_basic_package_version_file to generate a ConfigVersion file that
284
301
# allow users of gazebo to specify the API or version to depend on
@@ -293,16 +310,30 @@ else (build_errors)
293
310
install (FILES
294
311
${CMAKE_CURRENT_BINARY_DIR} /${cmake_conf_file}
295
312
${CMAKE_CURRENT_BINARY_DIR} /${cmake_conf_version_file}
296
- DESTINATION ${LIB_INSTALL_DIR} /cmake/${PROJECT_NAME_LOWER}${PROJECT_MAJOR_VERSION} / COMPONENT cmake)
313
+ DESTINATION ${CMAKE_CONFIG_INSTALL_DIR} COMPONENT cmake)
314
+
315
+ # Create *-targets.cmake file for build directory
316
+ # TODO: keep this instruction until we depend on CMake 3
317
+ # then change the first line from TARGETS ...
318
+ # to EXPORT ... to match the format used in install(EXPORT
319
+ export (TARGETS ${PROJECT_LIBRARY_TARGET_NAME}
320
+ FILE ${CMAKE_BINARY_DIR} /${cmake_targets_file} )
321
+
322
+ # Install *-targets.cmake file
323
+ install (EXPORT ${PROJECT_EXPORT_NAME}
324
+ DESTINATION ${CMAKE_CONFIG_INSTALL_DIR}
325
+ FILE ${cmake_targets_file} )
326
+
297
327
298
328
########################################
299
329
# If present, load platform-specific build hooks. This system is used,
300
- # for example, by the Ubuntu overlay, to arrange for installation of
301
- # Ubuntu-specific application-launching configuration.
330
+ # for example, by the Ubuntu overlay, to
331
+ # arrange for installation of Ubuntu-specific application-launching
332
+ # configuration.
302
333
if (EXISTS ${PROJECT_SOURCE_DIR} /cmake/packager-hooks/CMakeLists.txt)
303
334
message (STATUS "Loading packager build hooks from cmake/packager-hooks" )
304
335
add_subdirectory (cmake/packager-hooks)
305
336
endif ()
306
337
307
- message (STATUS "Configuration successful. Type make to compile ${PROJECT_NAME_LOWER} " )
338
+ message (STATUS "Configuration successful." )
308
339
endif (build_errors)
0 commit comments