|
| 1 | + |
1 | 2 | <h2>Hello, <code>Static</code> Library!</h2>
|
2 | 3 | <h3>Creating, Building and Using Static Library</h3>
|
3 | 4 | </br>
|
@@ -179,10 +180,103 @@ c++ ./bin/main.cxx.o -o ./bin/main_113 ./bin/liblib_113.a
|
179 | 180 | @Twitter: twitter.com/cnruby<br/>
|
180 | 181 |
|
181 | 182 | @Blogspot: cnruby.blogspot.com
|
| 183 | +======= |
| 184 | +# C++ Application with 'CMake' |
| 185 | + |
| 186 | +## Prerequisite |
| 187 | + |
| 188 | +### OS Environment |
| 189 | +- MacOS 10.11.6+ |
| 190 | +- Ubuntu 20.04+ |
| 191 | + |
| 192 | +### Language Environment |
| 193 | +- [Clang 8.0.0+](https://clang.llvm.org/) |
| 194 | +- [Python 3.7+](https://www.python.org/) |
| 195 | +- [Ruby 2.7.1+](https://www.ruby-lang.org/en/) |
| 196 | +- [Rust 1.42.0+](https://www.rust-lang.org/) |
| 197 | + |
| 198 | +### VS Code |
| 199 | +- [VS Code](https://code.visualstudio.com/) OR [Eclipse Theia](https://theia-ide.org/) |
| 200 | + |
| 201 | +### VS Code Extension |
| 202 | +- [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) |
| 203 | +- [CMake Tool](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) |
| 204 | +- [CMake](https://marketplace.visualstudio.com/items?itemName=twxs.cmake) |
| 205 | +- [reStructuredText](https://marketplace.visualstudio.com/items?itemName=lextudio.restructuredtext) |
| 206 | +- [Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one) |
| 207 | +- [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python) |
| 208 | +- [PlantUML](https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml) |
| 209 | +- [cmake-format](https://marketplace.visualstudio.com/items?itemName=cheshirekow.cmake-format) |
| 210 | + |
| 211 | +### Tool and Library |
| 212 | +- [CMake](https://cmake.org/) |
| 213 | +- [Ninja](https://ninja-build.org/) |
| 214 | +- [clang-format](https://clang.llvm.org/docs/ClangFormatStyleOptions.html) |
| 215 | +- [cmake_format](https://github.com/cheshirekow/cmake_format) |
| 216 | +- [Doxygen](http://www.doxygen.nl/) |
| 217 | +- [Graphviz](http://graphviz.org/) |
| 218 | +- [Sphinx](https://www.sphinx-doc.org/) |
| 219 | +- [Sphinx bootstrap theme](https://github.com/ryan-roemer/sphinx-bootstrap-theme) |
| 220 | +- [Library libpng 1.6.37+](http://www.libpng.org/pub/png/libpng.html) |
| 221 | +- [Library boost 1.72.0+](https://www.boost.org/) |
| 222 | +- [Library gettext 0.20.1](https://www.gnu.org/software/gettext/) |
| 223 | +- [Library SQLite 3.31.1+](https://www.sqlite.org/index.html) |
| 224 | +- [Library SQLite 3.8.10.2+](https://www.sqlite.org/index.html) For "basic_126" |
| 225 | + |
| 226 | +### Library on Ubuntu |
| 227 | +- Library language-pack-de |
| 228 | +- Library language-pack-zh-hans |
| 229 | +- Library language-pack-zh-hant, optional |
| 230 | + |
| 231 | +## Liste |
| 232 | +- **Hello, CMake!** Hello Application with 'CMake' "basic_101" [Youtube Video](https://youtu.be/I2-fIgkGfy8) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_101) |
| 233 | +- **Hello, Ninja!** Hello Application with 'CMake' and 'Ninja' "basic_102" [Youtube Video](https://youtu.be/wPpknWBG3v4) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_102) |
| 234 | +- **Hello, 'ccmake'!** 'CMake' Tool 'ccmake' "basic_103" [Youtube Video](https://youtu.be/yV7kopPr2Dk) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_103) |
| 235 | +- **Hello, 'cmake'!** Where are The 'CMake' Commands from? "basic_104" [Youtube Video](https://youtu.be/Dkfdqyeh4OM) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_104) |
| 236 | +- **Hello, VS Code!** Develop The 'CMake' Project with VS Code "basic_105" [Youtube Video](https://youtu.be/GgImAx-TTfY) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_105) |
| 237 | +- **Hello, CMake Script!** CMake's Scripting Language for Building Systems "basic_106" [Youtube Video](https://youtu.be/frS4Zc4zhMU) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_106) |
| 238 | +- **Hello, 'cmake_format'!** How to Format the 'CMake's File "basic_107" [Youtube Video](https://youtu.be/mhM12sqDKpE) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_107) |
| 239 | +- **Hello, C++ Style!** Formatting the 'C/C++'s Codes "basic_108" [Youtube Video](https://youtu.be/uN6OollV1xo) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_108) |
| 240 | +- **Hello, C++ Header!** Using a Include File from Other Folder "basic_109" [Youtube Video](https://youtu.be/dHt_i7-sBNM) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_109) |
| 241 | +- **Hello, Common Header!** Linking a Comman Include file in C++ "basic_110" [Youtube Video](https://youtu.be/XHcIdPFaTw0) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_110) |
| 242 | +- **Hello, C++ Library!** Build a Single Header File with CMake "basic_111" [Youtube Video](https://youtu.be/a0FdU06UGtQ) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_111) |
| 243 | +- **Hello, Default Include Paths!** Query the Default Include Directories "basic_112" [Youtube Video](https://youtu.be/-1hA3QqJKEw) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_112) |
| 244 | +- **Hello, Static Library!** Creating, Building and Using Static Library "basic_113" [Youtube Video](https://youtu.be/ztmYpK7lFCI) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_113) |
| 245 | +- **Hello, Different Folders!** Storing Header and Implementation File in Different Folders "basic_114" [Youtube Video](https://youtu.be/nTc_m7ELkzE) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_114) |
| 246 | +- **Hello, PRIVATE/PUBLIC!** Difference between PRIVATE/PUBLIC with target_include_directories "basic_115" [Youtube Video](https://youtu.be/pmRWYYEXLoc) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_115) |
| 247 | +- **Hello, Configure File!** Generating a C++ Configure File with CMake "basic_116" [Youtube Video](https://youtu.be/thJFmINbG0U) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_116) |
| 248 | +- **Hello, Package!** Finding an Executable Package For C++ Code "basic_117" [Youtube Video](https://youtu.be/D5sny0H8jUM) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_117) |
| 249 | +- **Hello, Doxygen!** Generating Documentation From annotated 'C/C++'s Sources "basic_118" "basic_118" [Youtube Video](https://youtu.be/T1CBiV09v8w) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_118) |
| 250 | +- **Hello, Module!** Using Your Custom CMake-Find Module "basic_119" [Youtube Video](https://youtu.be/7SkNPLFLrEc) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_119) |
| 251 | +- **Hello, Breathe!** Generating functional Documentation For 'C/C++'s Sources "basic_120" [Youtube Video](https://youtu.be/RE6rbuy11Z0) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_120) |
| 252 | +- **Hello, Third Party Library!** Using Third Party Library For C++ Sources "basic_121" [Youtube Video](https://youtu.be/fPAShAPvlio) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_121) |
| 253 | +- **Hello, Library's Components!** Using Library's Components For C++ Sources "basic_122" [Youtube Video](https://youtu.be/AMn65HQ5WAE) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_122) |
| 254 | +- **Hello, Module's Variables!** Using Find-Module's Variables with CMake Sources "basic_123" [Youtube Video](https://youtu.be/UuMJGiRZmlA) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_123) |
| 255 | +- **Hello, Targets!** Building multiple Targets using CMake on Ubuntu 20.04 "basic_124" [Youtube Video](https://youtu.be/-T4BMEI2agc) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_124) |
| 256 | +- **Hello, MULTOS!** Building C++ Project on Multiple Operating System using CMake "basic_125" [Youtube Video](https://youtu.be/fBkFHSka2NA) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_125) |
| 257 | +- **Hello, Multiple Versions!** Building Multiple Versions of a Shared Library Using CMake "basic_126" [Youtube Video](https://youtu.be/GmXbz3yfhWc) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_126) |
| 258 | +- **Hello, $PATH!** Creating a Symbolic Link for a Library "basic_127" [Youtube Video](https://youtu.be/DFdMZvpCoCg) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_127) |
| 259 | +- **Hello, GitHub! Formatting Library from Repositories Using CMake "basic_128" [Youtube Video](https://youtu.be/27zsR2It2K8) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_128) |
| 260 | +- **Hello, Hunter!** CMake-based Cross-Platform Package Manager for C++ Projects "basic_129" [Youtube Video](https://youtu.be/QWBu7vykWpc) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_129) |
| 261 | +- **Hello, Multiple Projects!** Creating a Solution with C++ Multiple Projects "basic_130" [Youtube Video](https://youtu.be/Vt5TEcFm0Hg) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_130) |
| 262 | +- **Hello, Output!** Changing the output default directory in a dedicated directory "basic_131" [Youtube Video](https://youtu.be/HnXP8jgryC4) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_131) |
| 263 | +- **Hello, Custom Target!** Adding and Using A Custom Target in CMake "basic_132" [Youtube Video](https://youtu.be/xcJbhFgVI04) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_132) |
| 264 | +- **Hello, Ninja Multi-Config!** Creating a Solution with C++ Multiple Configuration "basic_133" [Youtube Video](https://youtu.be/TLpscEDcI1U) | [Short Video](https://youtu.be/l3DCnXTSJuA) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_133) |
| 265 | +- **Hello, COMPILE_DEFINITIONS!** How to specify preprocessor definitions through CMake "basic_134" [Youtube Video](https://youtu.be/4GPcMCwWgVM) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_134) |
| 266 | +- **Hello, Generator Expression!** How to Learn Generator Expression in CMake "basic_135" [Youtube Video](https://youtu.be/xZkakSO3_II) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_135) |
| 267 | +- **Hello, Targets 2.0!** How to Use Generator Expression in C++ Project "basic_136" [Youtube Video](https://youtu.be/hEWES7JgrfU) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_136) |
| 268 | +- **Hello, Object Library!** How to Create and Use The Object File in CMake "basic_137"<br/> [Youtube Video](https://youtu.be/xj1fx2Xsl-U) | [Short Video](https://youtu.be/edcA9puzDgU) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_137) |
| 269 | +- **Hello, Object File!** How to Obtain and Apply The Object File of Library in CMake "basic_138"<br/> [Youtube Video](https://youtu.be/1LMmQ_3kjFA) | [Short Video](https://youtu.be/9Y-alzDxJpg) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_138) |
| 270 | +- **Hello, install:exe!** How to install executable from the project to local "basic_139"<br/> [Youtube Video](https://youtu.be/nJj1efRi6oI) | [Short Video](https://youtu.be/edcA9puzDgU) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_139) |
| 271 | +- **Hello, install:multi!** How to install executable on local with "Ninja Multi-Config" "basic_140" <br/> [Youtube Video](https://youtu.be/tCN-eFZN8xE) | [Short Video](https://youtu.be/oB6Ujd0BVno) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_140) |
| 272 | +- **Hello, install:DESTDIR!** How to use CMake Environment Variable `DESTDIR` "basic_141" <br/> [Youtube Video](https://youtu.be/NtYyjwSjt9Q) | [Short Video](https://youtu.be/15Zrf_WZXPU) | [Code](https://github.com/cnruby/w3h1_cmake/tree/basic_141) |
| 273 | + |
| 274 | + |
182 | 275 |
|
183 | 276 |
|
184 | 277 |
|
185 | 278 | ## References
|
| 279 | + |
186 | 280 | - https://cmake.org/cmake/help/latest/command/include_directories.html
|
187 | 281 | - https://cmake.org/cmake/help/latest/command/target_include_directories.html
|
188 | 282 | - https://stackoverflow.com/questions/31969547/what-is-the-difference-between-include-directories-and-target-include-directorie
|
@@ -234,4 +328,19 @@ cmake --build build/ --clean-first -v &> v11.txt
|
234 | 328 | ./bin/main_113
|
235 | 329 | rm -rf ./build/ ./bin/*
|
236 | 330 | ./shell/start.sh
|
237 |
| -``` |
| 331 | +``` |
| 332 | +======= |
| 333 | +- [Learning CMake: A beginner's guide](https://tuannguyen68.gitbooks.io/learning-cmake-a-beginner-s-guide/content/index.html) |
| 334 | +- [Modern CMake](https://cliutils.gitlab.io/modern-cmake/) |
| 335 | +- [CMake Community Wiki](https://gitlab.kitware.com/cmake/community/-/wikis/home) |
| 336 | +- [CMake BASIS](https://cmake-basis.github.io/quickstart.html) |
| 337 | +- [CMake Cookbook Github](https://github.com/dev-cafe/cmake-cookbook) |
| 338 | +- [CMake Cookbook 中文](https://chenxiaowei.gitbook.io/cmake-cookbook/) |
| 339 | +- [CMake questions forum](https://discourse.cmake.org) |
| 340 | +- [Getting started with cmake](https://riptutorial.com/cmake) |
| 341 | + |
| 342 | +## @cnruby |
| 343 | +- [@Gitter](https://gitter.im/cnruby) |
| 344 | +- [@Blog](https://www.blogger.com/blogger.g?tab=mj1&blogID=19758264#allposts/postNum=0) |
| 345 | +- [@Twitter](https://twitter.com/cnruby) |
| 346 | + |
0 commit comments