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
+18-15Lines changed: 18 additions & 15 deletions
Original file line number
Diff line number
Diff line change
@@ -35,7 +35,6 @@ Use an industry standard widely accepted build tool. This prevents you from rein
35
35
*[premake](https://premake.github.io/)
36
36
*[xmake](https://xmake.io) - A cross-platform build utility based on Lua. Modern C/C++ build tools, Support multi-language hybrid compilation
37
37
38
-
39
38
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
39
41
40
## Package Manager
@@ -67,7 +66,7 @@ Continuous Integration (CI) tools automatically build the source code as changes
* simple ad-hoc continuous integration that posts results to GitHub
@@ -89,7 +88,7 @@ If you have an open source, publicly-hosted project on GitHub:
89
88
* 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
89
* 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
93
95
94
@@ -122,7 +121,7 @@ You should use as many compilers as you can for your platform(s). Each compiler
122
121
*`-Wdouble-promotion` (GCC >= 4.6, Clang >= 3.8) warn if `float` is implicit promoted to `double`
123
122
*`-Wformat=2` warn on security issues around functions that format output (ie `printf`)
124
123
*`-Wlifetime` (only special branch of Clang currently) shows object lifetime issues
125
-
124
+
126
125
Consider using `-Weverything` and disabling the few warnings you need to on Clang
127
126
128
127
@@ -188,7 +187,7 @@ CMake now also comes with built-in support for calling `clang-tidy` during [norm
188
187
189
188
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
189
191
-
### Coverity Scan
190
+
### Coverity Scan
192
191
193
192
[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
193
@@ -202,16 +201,16 @@ The best bet is the static analyzer that you can run as part of your automated b
202
201
Notes:
203
202
204
203
* 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.
204
+
* Finding unused headers does not work with `-j` more than 1.
206
205
* Remember to add `--force` for code with a lot number of `#ifdef` if you need check all of them.
207
-
206
+
208
207
### cppclean
209
208
210
209
[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
210
212
-
211
+
213
212
### CppDepend
214
-
213
+
215
214
[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
215
217
216
### Clang's Static Analyzer
@@ -238,7 +237,7 @@ Can be enabled with the `/analyze` [command line option](http://msdn.microsoft.c
238
237
239
238
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
239
241
-
### Cevelop
240
+
### Cevelop
242
241
243
242
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
243
@@ -268,7 +267,7 @@ A coverage analysis tool shall be run when tests are executed to make sure the e
@@ -297,7 +296,7 @@ Be aware of the sanitizer options available, including runtime options. https://
297
296
298
297
### Fuzzy Analyzers
299
298
300
-
If your project accepts user defined input, considering running a fuzzy input tester.
299
+
If your project accepts user defined input, considering running a fuzzy input tester.
301
300
302
301
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.
*[https://epfl-vlsc.github.io/memoro/](Memoro) - A detailed heap profiler
326
+
*[https://epfl-vlsc.github.io/memoro/](Memoro) - A detailed heap profiler
328
327
329
328
## Ignoring Warnings
330
329
@@ -374,18 +373,22 @@ Don't forget to make sure that your error handling is being tested and works pro
374
373
375
374
[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.
376
375
377
-
### CNCC
376
+
### CNCC
378
377
379
378
[Customizable Naming Convention Checker](https://github.com/mapbox/cncc) can report on identifiers in your code that do not follow certain naming conventions.
380
379
381
380
### ClangFormat
382
381
383
382
[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.
384
383
385
-
### SourceMeter
384
+
### SourceMeter
386
385
387
386
[SourceMeter](https://www.sourcemeter.com/) offers a free version which provides many different metrics for your code and can also call into cppcheck.
388
387
389
388
### Bloaty McBloatface
390
389
391
390
[Bloaty McBloatface](https://github.com/google/bloaty) is a binary size analyzer/profiler for unix-like platforms
391
+
392
+
### pahole
393
+
394
+
[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