Mercurial > irccd
annotate STYLE.md @ 1063:65cd693f20ca
misc: fix build on FreeBSD
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 02 Jul 2021 10:02:50 +0200 |
parents | 201ddc487807 |
children |
rev | line source |
---|---|
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
1 irccd CODING STYLE |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
2 ================== |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
3 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
4 File content |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
5 ============ |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
6 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
7 - Use UTF-8 charset, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
8 - Use Unix line endings, |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
9 - Never write two consecutives blank lines. |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
10 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
11 Indent |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
12 ====== |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
13 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
14 Use tabs to indent and spaces for alignment. Tabs are meant and designed for |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
15 indenting code and have the advantage of being configurable. On the other hand |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
16 to keep code clean, you must align content with spaces only *within* a line. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
17 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
18 Note: we recommend 8 columns to avoid high number of indentations. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
19 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
20 Example (show whitespace in your editor) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
21 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
22 ```cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
23 class foo { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
24 public: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
25 enum type { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
26 dummy_value, // dummy comment |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
27 other_value // other comment |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
28 }; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
29 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
30 void long_function_name(very_long_type x1, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
31 very_long_type x2) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
32 { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
33 const map<string, string> m{ |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
34 { "hostname", "127.0.0.1" }, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
35 { "port", "6667" } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
36 }; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
37 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
38 }; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
39 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
40 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
41 As a rule of thumb, tabs must always be all length. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
42 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
43 Example of incorrect usage: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
44 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
45 ```cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
46 { "hostname", "127.0.0.1" }, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
47 { "port", "6667" } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
48 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
49 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
50 This example will not align correctly if tabstops are not set to 8. |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
52 C |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
53 = |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 Style |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 ----- |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
58 - Do not exceed 80 columns. |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 ### Braces |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 Braces follow the K&R style, they are never placed on their own lines except for |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 function definitions. |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
65 Do not put braces for single line statements. |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
66 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
67 ```c |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
68 if (condition) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
69 apply(); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
70 add(); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
71 } else |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
72 ok(); |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
73 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
74 if (condition) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
75 validate(); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
76 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
77 if (foo) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
78 state = long + conditional + that + requires + several + lines + |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
79 to + complete; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
80 ``` |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
82 Functions require braces on their own lines. |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
83 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
84 ```c |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
85 void |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
86 function() |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
87 { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
88 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
89 ``` |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
91 Note: the type of a function is broken into its own line. |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
93 ### Spaces |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
94 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
95 Each reserved keyword (e.g. `if`, `for`, `while`) requires a single space before |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
96 its argument. |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
97 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
98 Normal function calls do not require it. |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
99 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
100 ```c |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
101 if (foo) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
102 destroy(sizeof (int)); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
103 ``` |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
104 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
105 ### Pointers |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
106 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
107 Pointers are always next variable name. |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
108 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
109 ```c |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
110 void |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
111 cleanup(struct owner *owner); |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
112 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
113 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
114 ### Typedefs |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
115 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
116 Do not use typedef for non-opaque objects. It is allowed for function pointers. |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
117 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
118 ```c |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
119 struct pack { |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
120 int x; |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
121 int y; |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
122 }; |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
123 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
124 typedef void (*logger)(const char *line); |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
125 ``` |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
126 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
127 Note: do never add `_t` suffix to typedef's. |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
128 |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 ### Naming |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
131 - English names, |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
132 - No hungarian notation, |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
134 Almost everything is in `underscore_case` except macros and enumeration |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
135 constants. |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
136 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
137 ```c |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
138 #if defined(FOO) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
139 # include <foo.hpp> |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
140 #endif |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
141 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
142 #define MAJOR 1 |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
143 #define MINOR 0 |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
144 #define PATCH 0 |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
145 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
146 enum color { |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
147 COLOR_RED, |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
148 COLOR_GREEN, |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
149 COLOR_BLUE |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
150 }; |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
151 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
152 void |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
153 add_widget(const struct widget *widget_to_add); |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
154 ``` |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
155 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
156 ### Header guards |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
157 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
158 Do not use `#pragma once`. |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
160 Header guards are usually named `PROJECT_COMPONENT_FILENAME_H`. |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
161 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
162 ```c |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
163 #ifndef FOO_COMMON_UTIL_H |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
164 #define FOO_COMMON_UTIL_H |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
165 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
166 #endif /* !FOO_COMMON_UTIL_HPP */ |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
167 ``` |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
168 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
169 ### Enums |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
170 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
171 Enumerations constants are always defined in separate line to allow commenting |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
172 them as doxygen. |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
173 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
174 Note: enumeration constants are prefixed with its name. |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
176 ```c |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
177 enum color { |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
178 COLOR_RED, |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
179 COLOR_GREEN, |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
180 COLOR_BLUE |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
181 }; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
182 ``` |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
183 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
184 ### Switch |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
185 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
186 In a switch case statement, you **must** not declare variables and not indent |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
187 cases. |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
188 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
189 ```c |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
190 switch (variable) { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
191 case foo: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
192 do_some_stuff(); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
193 break; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
194 default: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
195 break; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
196 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
197 ``` |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 ### Files |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
201 - Use `.c` and `.h` as file extensions, |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
202 - Filenames are all lowercase. |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 ### Comments |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 Avoid useless comments in source files. Comment complex things or why it is done |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
207 like this. Do not use `//` style comments in C. |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
209 ```c |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
210 /* |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
211 * Multi line comments look like |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
212 * this. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
213 */ |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
215 /* Short comment. */ |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
216 ``` |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
218 Use `#if 0` to comment blocks of code. |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
219 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
220 ```c |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
221 #if 0 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
222 broken_stuff(); |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
223 #endif |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
224 ``` |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
225 |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 ### Includes |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 The includes should always come in the following order. |
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
230 1. System headers (POSIX mostly) |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
231 2. C header |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
232 3. Third party libraries |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
233 4. Application headers in "" |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
235 ```c |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
236 #include <sys/types.h> |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
237 #include <sys/stat.h> |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
238 #include <string.h> |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
240 #include <libircclient.h> |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
242 #include "foo.h" |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
243 ``` |
409
c363c09e1f44
Misc: add CONTRIBUTE.md and STYLE.md
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
245 Programming |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
246 ----------- |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
247 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
248 ### C Standard |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
249 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
250 Use C11 standard without extensions. |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
251 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
252 ### Assertions |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
253 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
254 Use the `assert` macro from the assert.h header file to verify programming |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
255 errors. |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
256 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
257 For example, you may use `assert` to verify that the developer access the data |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
258 between the bounds of an array: |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
259 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
260 ```c |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
261 int |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
262 get(struct data *data, unsigned index) |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
263 { |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
264 assert(index < data->length); |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
265 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
266 return data->buffer[index]; |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
267 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
268 ``` |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
269 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
270 The `assert` macro is not meant to check that a function succeeded, this code |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
271 must not be written that way: |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
272 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
273 ```c |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
274 assert(listen(10)); |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
275 ``` |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
276 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
277 ### Return |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
278 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
279 The preferred style is to return early in case of errors. That makes the code |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
280 more linear and not highly indented. |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
281 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
282 This code is preferred: |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
283 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
284 ```c |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
285 if (a_condition_is_not_valid) |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
286 return false; |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
287 if (an_other_condition) |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
288 return false; |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
289 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
290 start(); |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
291 save(); |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
292 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
293 return true; |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
294 ``` |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
295 |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
296 Additional rules: |
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
297 |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
298 - Do never put parentheses between the returned value, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
299 - Do not put a else branch after a return. |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
300 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
301 Shell |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
302 ===== |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
303 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
304 Write POSIX shell only with no bash, zsh or any extension. |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
305 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
306 Style |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
307 ----- |
533
d5b6dd7c2311
Misc: update STYLE.md, closes #710
David Demelier <markand@malikania.fr>
parents:
409
diff
changeset
|
308 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
309 - Try to keep lines shorter than 80 columns |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
310 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
311 Functions |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
312 --------- |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
313 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
314 Don't use `function` keyword, just keep the function name. |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
315 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
316 ```sh |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
317 usage() |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
318 { |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
319 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
320 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
321 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
322 It's usually recommended to prefix functions names with the program name to |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
323 avoid collisions with global commands. |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
324 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
325 ```sh |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
326 foo_clean() |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
327 { |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
328 } |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
329 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
330 foo_process() |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
331 { |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
332 } |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
333 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
334 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
335 Options |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
336 ------- |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
337 |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
338 For options, use `getopts` and prefer short options to long unless necessary. |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
339 Also set OPTERR=0 to avoid printing errors and do it yourself for UX |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
340 consistency. |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
341 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
342 ```sh |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
343 OPTERR=0 |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
344 while getopts "v" arg; do |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
345 case $arg in |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
346 v) |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
347 verbose=1 |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
348 ;; |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
349 esac |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
350 done |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
351 ``` |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
352 |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
353 Naming |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
354 ------ |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
355 |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
356 Use `UPPERCASE` variables for global variables and `lowercase` for temporary or |
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
357 local variables. |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
358 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
359 CMake |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
360 ===== |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
361 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
362 Style |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
363 ----- |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
364 |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
365 - Try to keep lines shorter than 80 columns |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
366 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
367 ### Spaces |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
368 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
369 Each programming keyword (e.g. `if`, `foreach`, `while`) requires a single space |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
370 before its argument, otherwise write opening parenthese directly after. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
371 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
372 ```cmake |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
373 foreach (c ${COMPONENTS}) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
374 string(TOUPPER ${c} CMP) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
375 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
376 if (${WITH_${CMP}}) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
377 add_executable(${c} ${c}.cpp) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
378 endif () |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
379 endforeach () |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
380 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
381 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
382 ### Line breaks |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
383 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
384 When CMake lines goes too long, you should indent arguments at the same level, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
385 it's also common to see named argument values indented even more. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
386 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
387 ```cmake |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
388 set( |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
389 FILES |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
390 ${myapp_SOURCE_DIR}/main.cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
391 ${myapp_SOURCE_DIR}/foo.cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
392 ${myapp_SOURCE_DIR}/bar.cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
393 ) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
394 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
395 command_with_lot_of_arguments( |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
396 TARGET foo |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
397 INSTALL On |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
398 SOURCES |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
399 ${myapp_SOURCE_DIR}/main.cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
400 ${myapp_SOURCE_DIR}/foo.cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
401 ${myapp_SOURCE_DIR}/bar.cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
402 COMMENT "Some comment" |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
403 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
404 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
405 Modern CMake |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
406 ------------ |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
407 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
408 CMake evolves over time, if you have read very old articles there is a chance |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
409 that what you have read is actually deprecated and replaced by other features. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
410 The following list is a short summary of modern CMake features that you must |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
411 use. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
412 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
413 ### Imported targets |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
414 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
415 When they are available, use imported targets rather than plain variables. They |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
416 offer complete dependency tracking with options and include directories as well. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
417 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
418 ```cmake |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
419 find_package(Boost COMPONENTS system) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
420 target_link_libraries(main Boost::system) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
421 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
422 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
423 ### Generator expressions |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
424 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
425 Use generator expressions when it make sense. For example you should use them |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
426 for variables that are not used at generation time (e.g CMAKE\_BUILD\_TYPE). |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
427 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
428 ```cmake |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
429 target_include_directories( |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
430 myapp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
431 $<BUILD_INTERFACE:${myapp_SOURCE_DIR}> |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
432 $<INSTALL_INTERFACE:include> |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
433 ) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
434 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
435 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
436 Warning: do never test against `CMAKE_BUILD_TYPE` in any CMakeLists.txt, IDEs |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
437 like Visual Studio will mismatch what you'll put in the conditions. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
438 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
439 ### Avoid global scoping |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
440 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
441 The following commands must be avoided as much as possible: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
442 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
443 - `link_directories`, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
444 - `link_libraries`, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
445 - `include_directories`, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
446 - `add_definitions`. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
447 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
448 They pollute the global namespace, all targets defined after these commands will |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
449 be built against those settings. Instead, you should use the per-targets |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
450 commands. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
451 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
452 ```cmake |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
453 target_include_directories( |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
454 mylib |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
455 PUBLIC |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
456 $<BUILD_INTERFACE:${mylib_SOURCE_DIR}> |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
457 $<INSTALL_INTERFACE:include> |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
458 ) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
459 target_link_libraries(mylib foo) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
460 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
461 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
462 ### Defining sources |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
463 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
464 You MUST never use any kind of `file(GLOB)` commands to list sources for an |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
465 executable. CMake is designed to be re-called by itself only when required, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
466 having such a construct will not let CMake be able to detect if you have |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
467 added/removed files in your source directory. Instead, you MUST always specify |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
468 all source by hands. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
469 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
470 ```cmake |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
471 set( |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
472 FILES |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
473 ${myapp_SOURCE_DIR}/main.cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
474 ${myapp_SOURCE_DIR}/a.cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
475 ${myapp_SOURCE_DIR}/b.cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
476 ) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
477 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
478 add_executable(myapp ${FILES}) |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
479 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
480 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
481 Markdown |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
482 ======== |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
483 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
484 Headers |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
485 ------- |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
486 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
487 For 1st and 2nd level headers, use `===` and `---` delimiters and underline the |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
488 whole title. Otherwise use `###`. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
489 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
490 ```markdown |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
491 Top level title |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
492 =============== |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
493 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
494 Sub title |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
495 --------- |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
496 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
497 ### Header 3 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
498 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
499 #### Header 4 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
500 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
501 ##### Header 5 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
502 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
503 ###### Header 6 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
504 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
505 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
506 Lists |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
507 ----- |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
508 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
509 Use hyphens for unordered lists for consistency, do not indent top level lists, |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
510 then indent by two spaces each level |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
511 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
512 ```markdown |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
513 - unordered list 1 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
514 - unordered list 2 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
515 - sub unordered item |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
516 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
517 1. unordered list 1 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
518 2. unordered list 2 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
519 2.1. sub unordered item |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
520 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
521 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
522 Code blocks |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
523 ----------- |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
524 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
525 You can use three backticks and the language specifier or just indent a block by |
1008
201ddc487807
irccd: add irccd.conf file
David Demelier <markand@malikania.fr>
parents:
773
diff
changeset
|
526 for leading tabs if you don't need syntax. |
773
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
527 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
528 ```cpp |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
529 std::cout << "hello world" << std::endl; |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
530 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
531 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
532 And without syntax: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
533 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
534 ```markdown |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
535 This is simple code block. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
536 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
537 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
538 Tables |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
539 ------ |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
540 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
541 Tables are supported and formatted as following: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
542 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
543 ```markdown |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
544 | header 1 | header 2 | |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
545 |----------|----------| |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
546 | item 1 | item 2 | |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
547 ``` |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
548 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
549 Alerts |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
550 ------ |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
551 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
552 It's possible to prefix a paragraph by one of the following topic, it renders a |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
553 different block depending on the output format: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
554 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
555 - Note: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
556 - Warning: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
557 - Danger: |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
558 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
559 Then, if the paragraph is too long, indent the text correctly. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
560 |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
561 ```markdown |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
562 Note: this is an information block that is too long to fit between the limits so |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
563 it is split and indented. |
8c44bbcbbab9
Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents:
635
diff
changeset
|
564 ``` |