648db22b |
1 | # Cmake contributions |
2 | |
3 | Contributions to the cmake build configurations are welcome. Please |
4 | use case sensitivity that matches modern (i.e. cmake version 2.6 and above) |
5 | conventions of using lower-case for commands, and upper-case for |
6 | variables. |
7 | |
8 | ## How to build |
9 | |
10 | As cmake doesn't support command like `cmake clean`, it's recommended to perform an "out of source build". |
11 | To do this, you can create a new directory and build in it: |
12 | ```sh |
13 | cd build/cmake |
14 | mkdir builddir |
15 | cd builddir |
16 | cmake .. |
17 | make |
18 | ``` |
19 | Then you can clean all cmake caches by simply delete the new directory: |
20 | ```sh |
21 | rm -rf build/cmake/builddir |
22 | ``` |
23 | |
24 | And of course, you can directly build in build/cmake: |
25 | ```sh |
26 | cd build/cmake |
27 | cmake |
28 | make |
29 | ``` |
30 | |
31 | To show cmake build options, you can: |
32 | ```sh |
33 | cd build/cmake/builddir |
34 | cmake -LH .. |
35 | ``` |
36 | |
37 | Bool options can be set to `ON/OFF` with `-D[option]=[ON/OFF]`. You can configure cmake options like this: |
38 | ```sh |
39 | cd build/cmake/builddir |
40 | cmake -DZSTD_BUILD_TESTS=ON -DZSTD_LEGACY_SUPPORT=OFF .. |
41 | make |
42 | ``` |
43 | |
44 | ### referring |
45 | [Looking for a 'cmake clean' command to clear up CMake output](https://stackoverflow.com/questions/9680420/looking-for-a-cmake-clean-command-to-clear-up-cmake-output) |
46 | |
47 | ## CMake Style Recommendations |
48 | |
49 | ### Indent all code correctly, i.e. the body of |
50 | |
51 | * if/else/endif |
52 | * foreach/endforeach |
53 | * while/endwhile |
54 | * macro/endmacro |
55 | * function/endfunction |
56 | |
57 | Use spaces for indenting, 2, 3 or 4 spaces preferably. Use the same amount of |
58 | spaces for indenting as is used in the rest of the file. Do not use tabs. |
59 | |
60 | ### Upper/lower casing |
61 | |
62 | Most important: use consistent upper- or lowercasing within one file ! |
63 | |
64 | In general, the all-lowercase style is preferred. |
65 | |
66 | So, this is recommended: |
67 | |
68 | ``` |
69 | add_executable(foo foo.c) |
70 | ``` |
71 | |
72 | These forms are discouraged |
73 | |
74 | ``` |
75 | ADD_EXECUTABLE(bar bar.c) |
76 | Add_Executable(hello hello.c) |
77 | aDd_ExEcUtAbLe(blub blub.c) |
78 | ``` |
79 | |
80 | ### End commands |
81 | To make the code easier to read, use empty commands for endforeach(), endif(), |
82 | endfunction(), endmacro() and endwhile(). Also, use empty else() commands. |
83 | |
84 | For example, do this: |
85 | |
86 | ``` |
87 | if(FOOVAR) |
88 | some_command(...) |
89 | else() |
90 | another_command(...) |
91 | endif() |
92 | ``` |
93 | |
94 | and not this: |
95 | |
96 | ``` |
97 | if(BARVAR) |
98 | some_other_command(...) |
99 | endif(BARVAR) |
100 | ``` |
101 | |
102 | ### Other resources for best practices |
103 | |
104 | https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#modules |