Mercurial > irccd
annotate cmake/function/IrccdDefineLibrary.cmake @ 896:b594a9269f49
tests: remove useless debug info in hook
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 20 Sep 2019 11:42:52 +0000 |
parents | 6baa070e083c |
children | 5e25439fe98d |
rev | line source |
---|---|
0 | 1 # |
2 # IrccdDefineLibrary.cmake -- CMake build system for irccd | |
3 # | |
824
06cc2f95f479
misc: happy new year!
David Demelier <markand@malikania.fr>
parents:
823
diff
changeset
|
4 # Copyright (c) 2013-2019 David Demelier <markand@malikania.fr> |
0 | 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 | |
19 # | |
20 # irccd_define_library | |
659 | 21 # -------------------- |
0 | 22 # |
874
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
23 # Synopsis: |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
24 # |
0 | 25 # irccd_define_library( |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
26 # TARGET target name |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
27 # SOURCES src1, src2, srcn |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
28 # EXPORT (Optional) set to true to export library through irccd |
874
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
29 # and install it |
797
2dfba38e93f0
cmake: fix headers installation, closes #924 @1h
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
30 # HEADERS (Optional) directory of headers to install |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
31 # FLAGS (Optional) C/C++ flags (without -D) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
32 # LIBRARIES (Optional) libraries to link |
877
6baa070e083c
misc: update before 3.0.0
David Demelier <markand@malikania.fr>
parents:
874
diff
changeset
|
33 # PRIVATE_INCLUDES (Optional) local includes for the target only |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
34 # PUBLIC_INCLUDES (Optional) includes to share with target dependencies |
0 | 35 # ) |
36 # | |
874
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
37 # Create a library and optionally install it. |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
38 # |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
39 # The function create a new library named with the parameter TARGET, you should |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
40 # prefix it with "lib" as its the convention within irccd (e.g. libfoo), the |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
41 # prefix is automatically removed. |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
42 # |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
43 # The argument SOURCES should contains the C++ source files and HEADERS should |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
44 # points to a directory to be installed verbatim in the include directory. |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
45 # |
877
6baa070e083c
misc: update before 3.0.0
David Demelier <markand@malikania.fr>
parents:
874
diff
changeset
|
46 # Optional argument FLAGS, PRIVATE_INCLUDES, PUBLIC_INCLUDES, LIBRARIES may be |
874
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
47 # passed to set compile flags, private includes, public includes and libraries |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
48 # respectively. |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
49 # |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
50 # If export boolean parameter is set, the library is exported and installed. |
bf2bdb41f181
doc: improve doxygen documentation
David Demelier <markand@malikania.fr>
parents:
858
diff
changeset
|
51 # |
0 | 52 |
823
d76699e13156
cmake: use GetPrerequisites, closes #988 @1h
David Demelier <markand@malikania.fr>
parents:
818
diff
changeset
|
53 include(${CMAKE_CURRENT_LIST_DIR}/IrccdInstallDependencies.cmake) |
d76699e13156
cmake: use GetPrerequisites, closes #988 @1h
David Demelier <markand@malikania.fr>
parents:
818
diff
changeset
|
54 |
0 | 55 function(irccd_define_library) |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
56 set(options EXPORT) |
797
2dfba38e93f0
cmake: fix headers installation, closes #924 @1h
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
57 set(oneValueArgs TARGET) |
877
6baa070e083c
misc: update before 3.0.0
David Demelier <markand@malikania.fr>
parents:
874
diff
changeset
|
58 set(multiValueArgs HEADERS SOURCES FLAGS LIBRARIES PRIVATE_INCLUDES PUBLIC_INCLUDES) |
0 | 59 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
60 cmake_parse_arguments(LIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) |
0 | 61 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
62 if (NOT LIB_TARGET) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
63 message(FATAL_ERROR "Please set TARGET") |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
64 endif () |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
65 if (NOT LIB_SOURCES) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
66 message(FATAL_ERROR "Please set SOURCES") |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
67 endif () |
0 | 68 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
69 add_library(${LIB_TARGET} ${LIB_SOURCES} ${LIB_HEADERS}) |
818
49fa22f0b4b9
windows: support for VS2017
David Demelier <markand@malikania.fr>
parents:
800
diff
changeset
|
70 target_include_directories( |
49fa22f0b4b9
windows: support for VS2017
David Demelier <markand@malikania.fr>
parents:
800
diff
changeset
|
71 ${LIB_TARGET} |
877
6baa070e083c
misc: update before 3.0.0
David Demelier <markand@malikania.fr>
parents:
874
diff
changeset
|
72 PRIVATE ${LIB_PRIVATE_INCLUDES} |
818
49fa22f0b4b9
windows: support for VS2017
David Demelier <markand@malikania.fr>
parents:
800
diff
changeset
|
73 PUBLIC ${LIB_PUBLIC_INCLUDES} |
49fa22f0b4b9
windows: support for VS2017
David Demelier <markand@malikania.fr>
parents:
800
diff
changeset
|
74 ) |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
75 target_compile_definitions( |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
76 ${LIB_TARGET} |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
77 PRIVATE |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
78 CMAKE_BINARY_DIR="${CMAKE_BINARY_DIR}" |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
79 CMAKE_SOURCE_DIR="${CMAKE_SOURCE_DIR}" |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
80 PUBLIC |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
81 ${LIB_FLAGS} |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
82 ) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
83 target_link_libraries(${LIB_TARGET} ${LIB_LIBRARIES}) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
84 set_target_properties( |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
85 ${LIB_TARGET} |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
86 PROPERTIES |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
87 PREFIX "" |
818
49fa22f0b4b9
windows: support for VS2017
David Demelier <markand@malikania.fr>
parents:
800
diff
changeset
|
88 IMPORT_PREFIX "" |
858
6af323b76970
cmake: install macros and reduce IrccdOptions.cmake, closes #951 @1h
David Demelier <markand@malikania.fr>
parents:
824
diff
changeset
|
89 CXX_STANDARD 17 |
6af323b76970
cmake: install macros and reduce IrccdOptions.cmake, closes #951 @1h
David Demelier <markand@malikania.fr>
parents:
824
diff
changeset
|
90 CXX_STANDARD_REQUIRED On |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
91 ) |
510
6ec510722582
CMake: enable vera++ as code checking, closes #603
David Demelier <markand@malikania.fr>
parents:
509
diff
changeset
|
92 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
93 if (${LIB_EXPORT}) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
94 install( |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
95 TARGETS ${LIB_TARGET} |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
96 EXPORT irccd-targets |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
97 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
98 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
99 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
100 ) |
823
d76699e13156
cmake: use GetPrerequisites, closes #988 @1h
David Demelier <markand@malikania.fr>
parents:
818
diff
changeset
|
101 |
d76699e13156
cmake: use GetPrerequisites, closes #988 @1h
David Demelier <markand@malikania.fr>
parents:
818
diff
changeset
|
102 irccd_install_dependencies(${LIB_TARGET}) |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
103 endif () |
710
a17de53db29b
Misc: export libraries
David Demelier <markand@malikania.fr>
parents:
663
diff
changeset
|
104 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
105 if (LIB_HEADERS) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
106 install( |
797
2dfba38e93f0
cmake: fix headers installation, closes #924 @1h
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
107 DIRECTORY ${LIB_HEADERS} |
2dfba38e93f0
cmake: fix headers installation, closes #924 @1h
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
108 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/irccd |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
109 ) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
710
diff
changeset
|
110 endif () |
72
98ac3c79009f
Irccd: start making a library, #429
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
111 endfunction() |