Mercurial > code
annotate CMakeLists.txt @ 644:0a947aec477c
doxygen: use CMake macro
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 01 Aug 2018 14:06:11 +0200 |
parents | 18aa7181e0c3 |
children | 5bd9424a523a |
rev | line source |
---|---|
219 | 1 # |
2 # CMakeLists.txt -- code building for common code | |
3 # | |
628
b327391f6a62
Misc: update copyrights
David Demelier <markand@malikania.fr>
parents:
621
diff
changeset
|
4 # Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> |
219 | 5 # |
6 # Permission to use, copy, modify, and/or distribute this software for any | |
7 # purpose with or without fee is hereby granted, provided that the above | |
8 # copyright notice and this permission notice appear in all copies. | |
9 # | |
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 # | |
18 | |
516
cc50a80dc163
CMake: change code_define_module and rename the CMake file
David Demelier <markand@malikania.fr>
parents:
513
diff
changeset
|
19 cmake_minimum_required(VERSION 3.5) |
219 | 20 project(code) |
21 | |
642
18aa7181e0c3
to_int: use std::optional instead of boost
David Demelier <markand@malikania.fr>
parents:
630
diff
changeset
|
22 set(CMAKE_CXX_STANDARD 17) |
547
ecf5fb9319da
Fs: switch to spaces, add FS_EXPORT
David Demelier <markand@malikania.fr>
parents:
538
diff
changeset
|
23 set(CMAKE_CXX_STANDARD_REQUIRED On) |
ecf5fb9319da
Fs: switch to spaces, add FS_EXPORT
David Demelier <markand@malikania.fr>
parents:
538
diff
changeset
|
24 |
573
db2934ac95c7
Net: fix some warnings
David Demelier <markand@malikania.fr>
parents:
568
diff
changeset
|
25 if (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") |
db2934ac95c7
Net: fix some warnings
David Demelier <markand@malikania.fr>
parents:
568
diff
changeset
|
26 set(CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic ${CMAKE_CXX_FLAGS}") |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
27 set(CMAKE_CXX_FLAGS_DEBUG "-Werror ${CMAKE_CXX_FLAGS_DEBUG}") |
573
db2934ac95c7
Net: fix some warnings
David Demelier <markand@malikania.fr>
parents:
568
diff
changeset
|
28 endif () |
db2934ac95c7
Net: fix some warnings
David Demelier <markand@malikania.fr>
parents:
568
diff
changeset
|
29 |
516
cc50a80dc163
CMake: change code_define_module and rename the CMake file
David Demelier <markand@malikania.fr>
parents:
513
diff
changeset
|
30 # Doxygen target. |
361 | 31 find_package(Doxygen) |
612
18ec7f4fc3de
Js: new style, closes #685
David Demelier <markand@malikania.fr>
parents:
606
diff
changeset
|
32 find_package(Boost REQUIRED COMPONENTS unit_test_framework) |
361 | 33 |
630
04dffcdb8e1a
json_util: initial import, closes #776 @1h
David Demelier <markand@malikania.fr>
parents:
628
diff
changeset
|
34 # Extern packages. |
04dffcdb8e1a
json_util: initial import, closes #776 @1h
David Demelier <markand@malikania.fr>
parents:
628
diff
changeset
|
35 add_subdirectory(extern/json) |
04dffcdb8e1a
json_util: initial import, closes #776 @1h
David Demelier <markand@malikania.fr>
parents:
628
diff
changeset
|
36 |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
37 enable_testing() |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
38 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
39 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
40 # code_define_module |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
41 # ------------------------------------------------------------------- |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
42 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
43 # code_define_module( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
44 # NAME lowercase name |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
45 # SOURCES source files |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
46 # LIBRARIES (Optional) libraries |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
47 # INCLUDES (Optional) include directories |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
48 # FLAGS (Optional) flags |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
49 # ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
50 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
51 # Create a test for the given module. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
52 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
53 # This macro adds a new option WITH_<uppercase NAME> to test the module. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
54 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
55 # If the module has a file test/main.cpp in its directory, a target test-<NAME> is created. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
56 # |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
57 function(code_define_module) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
58 set(oneValueArgs NAME) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
59 set(multiValueArgs SOURCES LIBRARIES INCLUDES FLAGS) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
60 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
61 cmake_parse_arguments(MOD "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
62 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
63 if (NOT MOD_NAME) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
64 message(FATAL_ERROR "Argument NAME is not set") |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
65 endif () |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
66 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
67 # Create the option for enabling the test. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
68 string(TOUPPER ${MOD_NAME} optionname) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
69 option(WITH_${optionname} "Enable ${MOD_NAME}" On) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
70 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
71 if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp AND WITH_${optionname}) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
72 # Create test executable. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
73 add_executable(test-${MOD_NAME} ${MOD_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/test/main.cpp) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
74 set_target_properties( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
75 test-${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
76 PROPERTIES |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
77 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
78 RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
79 RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
80 RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
81 RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
82 ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
83 target_compile_definitions( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
84 test-${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
85 PRIVATE |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
86 BOOST_TEST_DYN_LINK |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
87 ${MOD_FLAGS} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
88 ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
89 target_include_directories( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
90 test-${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
91 PRIVATE |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
92 ${CMAKE_CURRENT_SOURCE_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
93 ${MOD_INCLUDES} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
94 ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
95 target_link_libraries( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
96 test-${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
97 Boost::unit_test_framework |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
98 ${MOD_LIBRARIES} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
99 ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
100 |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
101 # Register the test. |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
102 add_test( |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
103 NAME ${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
104 COMMAND test-${MOD_NAME} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
105 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
106 ) |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
107 endif () |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
108 endfunction() |
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
109 |
361 | 110 if (DOXYGEN_FOUND) |
644
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
111 set(DOXYGEN_PROJECT_NAME code) |
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
112 set(DOXYGEN_STRIP_FROM_PATH ${code_SOURCE_DIR}/cpp) |
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
113 set(DOXYGEN_FILE_PATTERNS "*.hpp") |
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
114 set(DOXYGEN_WARN_NO_PARAMDOC YES) |
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
115 set(DOXYGEN_WARN_AS_ERROR YES) |
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
116 set(DOXYGEN_QUIET YES) |
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
117 |
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
118 doxygen_add_docs( |
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
119 doxygen |
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
120 ${code_SOURCE_DIR}/cpp |
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
121 WORKING_DIRECTORY ${code_SOURCE_DIR} |
548
f48bb09bccc7
Misc: huge cleanup, switch to spaces
David Demelier <markand@malikania.fr>
parents:
547
diff
changeset
|
122 ) |
361 | 123 |
644
0a947aec477c
doxygen: use CMake macro
David Demelier <markand@malikania.fr>
parents:
642
diff
changeset
|
124 add_custom_target(docs ALL DEPENDS doxygen) |
361 | 125 endif () |
126 | |
621
ca5912ad2909
Misc: massive refactoring, closes #717
David Demelier <markand@malikania.fr>
parents:
618
diff
changeset
|
127 add_subdirectory(cpp) |