You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 02-Use_the_Tools_Available.md
+23-15Lines changed: 23 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -34,7 +34,7 @@ Use an industry standard widely accepted build tool. This prevents you from rein
34
34
*[Qt Build Suite](http://doc.qt.io/qbs/) - Crossplatform build tool From Qt.
35
35
*[meson](http://mesonbuild.com/index.html) - Open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible.
36
36
*[premake](https://premake.github.io/)
37
-
37
+
*[xmake](https://xmake.io) - A cross-platform build utility based on Lua. Modern C/C++ build tools, Support multi-language hybrid compilation
38
38
39
39
Remember, it's not just a build tool, it's also a programming language. Try to maintain good clean build scripts and follow the recommended practices for the tool you are using.
40
40
@@ -67,7 +67,7 @@ Continuous Integration (CI) tools automatically build the source code as changes
* simple ad-hoc continuous integration that posts results to GitHub
@@ -89,7 +89,7 @@ If you have an open source, publicly-hosted project on GitHub:
89
89
* go enable Travis Ci and AppVeyor integration right now. We'll wait for you to come back. For a simple example of how to enable it for your C++ CMake-based application, see here: https://github.com/ChaiScript/ChaiScript/blob/master/.travis.yml
90
90
* enable one of the coverage tools listed below (Codecov or Coveralls)
These tools are all free and relatively easy to set up. Once they are set up you are getting continuous building, testing, analysis and reporting of your project. For free.
94
94
95
95
@@ -122,7 +122,7 @@ You should use as many compilers as you can for your platform(s). Each compiler
122
122
*`-Wdouble-promotion` (GCC >= 4.6, Clang >= 3.8) warn if `float` is implicit promoted to `double`
123
123
*`-Wformat=2` warn on security issues around functions that format output (ie `printf`)
124
124
*`-Wlifetime` (only special branch of Clang currently) shows object lifetime issues
125
-
125
+
126
126
Consider using `-Weverything` and disabling the few warnings you need to on Clang
127
127
128
128
@@ -165,7 +165,7 @@ Not recommended
165
165
166
166
Start with very strict warning settings from the beginning. Trying to raise the warning level after the project is underway can be painful.
167
167
168
-
Consider using the *treat warnings as errors* setting. `/Wx` with MSVC, `-Werror` with GCC / Clang
168
+
Consider using the *treat warnings as errors* setting. `/WX` with MSVC, `-Werror` with GCC / Clang
169
169
170
170
## LLVM-based tools
171
171
@@ -188,7 +188,7 @@ CMake now also comes with built-in support for calling `clang-tidy` during [norm
188
188
189
189
The best bet is the static analyzer that you can run as part of your automated build system. Cppcheck and clang meet that requirement for free options.
190
190
191
-
### Coverity Scan
191
+
### Coverity Scan
192
192
193
193
[Coverity](https://scan.coverity.com/) has a free (for open source) static analysis toolkit that can work on every commit in integration with [Travis CI](http://travis-ci.org) and [AppVeyor](http://www.appveyor.com/).
194
194
@@ -202,16 +202,16 @@ The best bet is the static analyzer that you can run as part of your automated b
202
202
Notes:
203
203
204
204
* For correct work it requires well formed path for headers, so before usage don't forget to pass: `--check-config`.
205
-
* Finding unused headers does not work with `-j` more than 1.
205
+
* Finding unused headers does not work with `-j` more than 1.
206
206
* Remember to add `--force` for code with a lot number of `#ifdef` if you need check all of them.
207
-
207
+
208
208
### cppclean
209
209
210
210
[cppclean](https://github.com/myint/cppclean) - Open source static analyzer focused on finding problems in C++ source that slow development of large code bases.
211
211
212
-
212
+
213
213
### CppDepend
214
-
214
+
215
215
[CppDepend](https://www.cppdepend.com/) Simplifies managing a complex C/C++ code base by analyzing and visualizing code dependencies, by defining design rules, by doing impact analysis, and comparing different versions of the code. It's free for OSS contributors.
216
216
217
217
### Clang's Static Analyzer
@@ -238,7 +238,7 @@ Can be enabled with the `/analyze` [command line option](http://msdn.microsoft.c
238
238
239
239
Both of these tools from [JetBrains](https://www.jetbrains.com/cpp/) offer some level of static analysis and automated fixes for common things that can be done better. They have options available for free licenses for open source project leaders.
240
240
241
-
### Cevelop
241
+
### Cevelop
242
242
243
243
The Eclipse based [Cevelop](https://www.cevelop.com/) IDE has various static analysis and refactoring / code fix tools available. For example, you can replace macros with C++ `constexprs`, refactor namespaces (extract/inline `using`, qualify name), and refactor your code to C++11's uniform initialization syntax. Cevelop is free to use.
244
244
@@ -268,7 +268,7 @@ A coverage analysis tool shall be run when tests are executed to make sure the e
@@ -307,7 +307,7 @@ Be aware of the sanitizer options available, including runtime options. https://
307
307
308
308
### Fuzzy Analyzers
309
309
310
-
If your project accepts user defined input, considering running a fuzzy input tester.
310
+
If your project accepts user defined input, considering running a fuzzy input tester.
311
311
312
312
Both of these tools use coverage reporting to find new code execution paths and try to breed novel inputs for your code. They can find crashes, hangs, and inputs you didn't know were considered valid.
*`_GLIBCXX_DEBUG` with GCC's implementation libstdc++ implementation. See [Krister's blog article](https://kristerw.blogspot.se/2018/03/detecting-incorrect-c-stl-usage.html).
334
334
335
+
### Heap Profiling
336
+
337
+
*[Memoro](https://epfl-vlsc.github.io/memoro/) - A detailed heap profiler
338
+
335
339
## Ignoring Warnings
336
340
337
341
If it is determined by team consensus that the compiler or analyzer is warning on something that is either incorrect or unavoidable, the team will disable the specific error to as localized part of the code as possible.
@@ -380,18 +384,22 @@ Don't forget to make sure that your error handling is being tested and works pro
380
384
381
385
[ABI Compliance Checker](http://ispras.linuxbase.org/index.php/ABI_compliance_checker) (ACC) can analyze two library versions and generates a detailed compatibility report regarding API and C++ ABI changes. This can help a library developer spot unintentional breaking changes to ensure backward compatibility.
382
386
383
-
### CNCC
387
+
### CNCC
384
388
385
389
[Customizable Naming Convention Checker](https://github.com/mapbox/cncc) can report on identifiers in your code that do not follow certain naming conventions.
386
390
387
391
### ClangFormat
388
392
389
393
[ClangFormat](http://clang.llvm.org/docs/ClangFormat.html) can check and correct code formatting to match organizational conventions automatically. [Multipart series](https://engineering.mongodb.com/post/succeeding-with-clangformat-part-1-pitfalls-and-planning/) on utilizing clang-format.
390
394
391
-
### SourceMeter
395
+
### SourceMeter
392
396
393
397
[SourceMeter](https://www.sourcemeter.com/) offers a free version which provides many different metrics for your code and can also call into cppcheck.
394
398
395
399
### Bloaty McBloatface
396
400
397
401
[Bloaty McBloatface](https://github.com/google/bloaty) is a binary size analyzer/profiler for unix-like platforms
402
+
403
+
### pahole
404
+
405
+
[pahole](https://linux.die.net/man/1/pahole) generates data on holes in the packing of data structures and classes in compiled code. It can also the size of structures and how they fit within the system's cache lines.
0 commit comments