{"id":24058283,"url":"https://github.com/genyleap/project-template","last_synced_at":"2025-04-05T21:06:28.008Z","repository":{"id":44958355,"uuid":"366362740","full_name":"genyleap/Project-Template","owner":"genyleap","description":"PT is a template for modern C++ projects with useful features for developing cross-platform products.","archived":false,"fork":false,"pushed_at":"2024-11-25T09:24:37.000Z","size":594,"stargazers_count":101,"open_issues_count":0,"forks_count":26,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-29T20:03:22.794Z","etag":null,"topics":["application-structure","c-plus-plus","cmake","cpp","cpp17","cpp20","cpp23","custom-project","dependencies-manager","modern-cpp","modern-project","package-manager","project","qml","qt","qtquick","structure","template"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/genyleap.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.md","codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-05-11T11:47:18.000Z","updated_at":"2025-03-29T12:32:44.000Z","dependencies_parsed_at":"2023-02-17T10:01:00.824Z","dependency_job_id":"2928b931-06c3-4122-88ab-407280374606","html_url":"https://github.com/genyleap/Project-Template","commit_stats":null,"previous_names":[],"tags_count":8,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genyleap%2FProject-Template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genyleap%2FProject-Template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genyleap%2FProject-Template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genyleap%2FProject-Template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/genyleap","download_url":"https://codeload.github.com/genyleap/Project-Template/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247399873,"owners_count":20932876,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["application-structure","c-plus-plus","cmake","cpp","cpp17","cpp20","cpp23","custom-project","dependencies-manager","modern-cpp","modern-project","package-manager","project","qml","qt","qtquick","structure","template"],"created_at":"2025-01-09T05:57:04.670Z","updated_at":"2025-04-05T21:06:27.973Z","avatar_url":"https://github.com/genyleap.png","language":"C++","readme":"# Modern Project-Template (PT)\nA template for modern C++ projects with useful features for developing cross-platform projects.\n\n##  Cross-Platform project structure based on CMake ##\nThis repository is a modern project template based on C++ and CMake build tool.\n\n[![forthebadge](https://forthebadge.com/images/badges/made-with-c-plus-plus.svg)](https://forthebadge.com)\n\n## Top features:\n- ✅ Very easy management of dependencies.\n- ✅ Top level macro usage.\n- ✅ Customized project structure based on your program type.\n- ✅ Advanced microprocessors.\n- ✅ Cross-Platform\n- ✅ Adapted to latest language \u0026 compiler standards.\n\n## Supported platforms:\n\n- [x] macOS\n- [x] Windows\n- [x] Linux\n- [x] freeBSD\n- [ ] OpenBSD\n- [ ] NetBSD\n- [x] iOS\n- [ ] watchOS\n- [x] Android\n\n## Supported project type:\n\n- [x] Core Application\n- [x] Desktop Application\n- [x] Embedded Application\n- [x] Mobile Application\n- [x] Library\n\n## Language Standard Support [C++2a or C++2b]\n- It depends on your compiler!\n\n## Building\n\n- You need CMake tool for building source code\n- CMake 3.23 or higher is required.\n\n```\ncd build\ncmake ..\nmake\n./ProjectTemplate\n\n```\n\n\u003e How to sync project from template source?\n- This feature is embedded in the project as Git Action.\n\n## Customization options.\n```\ncmake .. -DPROJECT_NAME=\"Your Project Name\" -DPROJECT_CREATOR=\"Kambiz\" -DPROJECT_VERSION_TYPE=\"beta\" -DPROJECT_DESCRIPTION=\"This is my awesome project\" -DPROJECT_LICENSE_TYPE=\"mit\"\n```\n\n## Customization Note\n- Change PROJECT_NAME variable to your own project name.\n- Change PROJECT_CREATOR variable to your main project developer.\n- Change PROJECT_DESCRIPTION variable to your project description.\n- Change PROJECT_HOMEPAGE_URL variable to your project official url.\n- Change PROJECT_VERSION_TYPE variable to your project version based on semantic versioning.\n\n- The project output structure is based on \"application\" with gui by default, so if you want to change it, you should change the PROJECT_USAGE_TYPE and PROJECT_MAIN_TYPE variables.\n- Change the DEVELOPER_BUNDLE_IDENTIFIER variable for your own developer id, especially in Apple products, you should set it according to the bundle string in Xcode.\n- The language standard is based on C++17 by default, you can change it via CMAKE_CXX_STANDARD variable.\n- Finally, specify software version for the variables PROJECT_VERSION_MAJOR, PROJECT_VERSION_MINOR, PROJECT_VERSION_PATCH and PROJECT_VERSION_TWEAK.\n- Enjoy your project! :)\n\n## CMake module option [Dependencies]\n- These features can be useful in downloading, building, and integrating prerequisites into your project.\n- So you can set cmake option variable for enabling them.\n\n- Include latest standard of C++\n```\ncmake .. -DUSE_LATEST_STANDARD=true\n```\n\n- Include Boost library\n- This option is currently usable if it's already installed on your system.\n- I'll work on the automatic downloader version as soon as possible.\n```\ncmake .. -DUSE_BOOST=true\n```\n\n- Include Qt Framework\n```\ncmake .. -DGUI_APPLICATION=true\n```\n\n- Force to update latest version of dependencies from repositories.\n```\ncmake .. -DFORCE_UPGRADED_LIBS=false\n```\n\n\n- Include UI\n```\ncmake .. -DHAS_USER_INTERFACE=true\n```\n\n- Include project main type by [stl, qt, qtwidget, qtquick]\n- stl (Your project will be based on stl [Default]).\n- qt (Your project will be based on Qt Core only [No GUI]).\n- qtwidget (Your project will be based on C++, QtWidget [Classic GUI]).\n- qtquick (Your project will be based on C++, QtQuick and QML [Modern GUI]).\n```\ncmake .. -DPROJECT_MAIN_TYPE=stl\n```\n\n- Project Type\n- Use these keys [application, library]\n```\ncmake .. -DPROJECT_USAGE_TYPE=application\n```\n\n- Project Type\n- Use these keys [application, library]\n```\ncmake .. -DDEVELOPER_BUNDLE_IDENTIFIER=com.kambizasadzadeh.app\n```\n\n- The Qt Quick Compiler is a development add-on for Qt Quick applications which allows you to compile QML source code into the final binary. When you use this add-on, the application's startup time is significantly improved and you no longer need to deploy .qml files together with the application.\n```\ncmake .. -DUSE_QT_QUICK_COMPILER=false\n```\n\n- Include Curl library\n```\ncmake .. -DUSE_CURL=true\n```\n\n- Include FMT library\n```\ncmake .. -DUSE_FMT=true\n```\n\n- Include CppCheck library\n```\ncmake .. -DUSE_CPP_CHECK=true\n```\n\n- Include Google-Test\n```\ncmake .. -DUSE_GOOGLE_TEST=true\n```\n\n- Include Doc-Test\n```\ncmake .. -DUSE_DOC_TEST=true\n```\n\n- Include Catch2\n```\ncmake .. -DUSE_CATCH2=true\n```\n\n- Include CTRE\n```\ncmake .. -DUSE_CTRE=true\n```\n\n- Include JSon library\n```\ncmake .. -DUSE_JSON=true\n```\n\n- Include OpenSSL\n```\ncmake .. -DUSE_OPENSSL=true\n```\n\n- Include ZLib\n```\ncmake .. -DDUSE_ZLIB=true\n```\n\n## CMake module option [Compiler options]\n\n- Enabling the test of clang-tidy\n```\ncmake .. -DENABLE_CLANG_TIDY=true\n```\n\n- Build the project as minimally as possible\n```\ncmake .. -DSIMPLE_BUILD=true\n```\n\n- Enable address sanitizer\n```\ncmake .. -DENABLE_ASAN=true\n```\n\n- Enabling the build of safe codes only [check by warnings]!\n```\ncmake .. -DENABLE_WARN_MODE=true\n```\n\n- Enabling the build of safe codes only!\n```\ncmake .. -DENABLE_SAFE_ONLY=true\n```\n\n- Enable developer (debug) mode\n```\ncmake .. -DBUILD_DEBUG_MODE=true\n```\n\n- Enabling the build of debug logging\n```\ncmake .. -DDEBUG_LOGGING=true\n```\n\n- Build Static Version\n```\ncmake .. -DENABLE_STATIC_LIB_BUILD=true\n```\n\n- Developer mode\n```\ncmake .. -DENABLE_DEVELOPER_MODE=true\n```\n\n- Todo mode\n```\ncmake .. -DENABLE_TODO_MODE=true\n```\n\n- Experimental mode\n```\ncmake .. -DENABLE_EXPERIMENTAL_MODE=true\n```\n\n- Build Shared (Dynamic) Version\n```\ncmake .. -ENABLE_SHARED_LIB_BUILD=true\n```\n\n- Forcing to enable updated programming language.\n```\ncmake .. -FORCE_LATEST_STANDARD_FEATURE=true\n```\n\n- Optimization level.\n```\ncmake .. -DOPTIMIZATION_LEVEL=0\n```\n- O Disables optimization, no optimization, fast compilation and nicely debuggable code. (default)\n- 1 Some optimization. Is equivalent to 0 with no parameters. Optimization for code size and execution time, generate minimum size code.\n- 2 Moderate optimization, enables all standard optimizations. Optimization more for code size and execution time, optimizes code for maximum speed.\n- 3 Over and above 2, does aggressive optimizations that may not be compliant to language standard. Optimization more for code size and execution time\n- 4 Over and above 3, does aggressive optimizations that may not be compliant to language standard. Optimizations for size over optimizations for speed.\n- 5 O3 with fast none accurate math calculations, optimizations for speed over optimizations for size.\n\nYou can set or change your project's basic information such as name, description, link, etc.\n\n```\nset(PROJECT_NAME \"ProjectTemplate\" CACHE STRING \"Project Name\")\nset(PROJECT_TARGET ${PROJECT_NAME} CACHE STRING \"Target Name\")\n```\n\n- Creator Name.\n```\nset(PROJECT_CREATOR \"Kambiz Asadzadeh\")\n```\n\n- Project name, language, description, url and version.\n```\nproject(\n    ${PROJECT_NAME}\n    LANGUAGES CXX\n    DESCRIPTION \"Description of your project.\"\n    HOMEPAGE_URL \"https://kambizasadzadeh.com\"\n    VERSION ${PROJECT_VERSION}\n)\n```\n\n## Configuration output\n\n```bash\n\n-- The CXX compiler identification is AppleClang 12.0.0.12000032\n-- Detecting CXX compiler ABI info\n-- Detecting CXX compiler ABI info - done\n-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped\n-- Detecting CXX compile features\n-- Detecting CXX compile features - done\n-- Ready for Apple Silicon.\n-- Performing Test COMPILER_SUPPORTS_CXX23\n-- Performing Test COMPILER_SUPPORTS_CXX23 - Success\n-- Performing Test COMPILER_SUPPORTS_CXX20\n-- Performing Test COMPILER_SUPPORTS_CXX20 - Success\n-- Performing Test COMPILER_SUPPORTS_CXX17\n-- Performing Test COMPILER_SUPPORTS_CXX17 - Success\n-- Performing Test COMPILER_SUPPORTS_CXX14\n-- Performing Test COMPILER_SUPPORTS_CXX14 - Success\n-- Performing Test COMPILER_SUPPORTS_CXX11\n-- Performing Test COMPILER_SUPPORTS_CXX11 - Success\n-- Performing Test COMPILER_SUPPORTS_CXX0X\n-- Performing Test COMPILER_SUPPORTS_CXX0X - Success\n\n-- ------ ProjectTemplate Tools Configuration ------\n-- Language Standard\t    : C++[20]\n-- Compiler\t\t    : AppleClang\n-- Compiler Version\t    : 12.0.0.12000032\n-- OS Target\t\t    : Darwin-20.3.0\n-- OS Version\t\t    : \n-- System Architecture\t    : x86_64\n-- Project License\t    : MIT\n-- ------ ProjectTemplate Framework Info ------\n-- Name\t\t\t    : ProjectTemplate\n-- Description\t\t    : Description of your project.\n-- Version\t\t    : \n-- ------ ProjectTemplate Project Configuration ------\n-- DEVELOPER\t\t    : \n-- PROJECT_PROJECT\t    : \n-- PROJECT_TARGET\t    : ProjectTemplate\n-- PROJECT_VERSION\t    : 1.0.2.0\n-- PROJECT_VERSION_TYPE\t    : final\n-- ------ ProjectTemplate Building Configuration ------\n-- PROJECT_BUILD_SHARED\t: \n-- PROJECT_VERSION_TAG_HEX\t: 0x00000000\n-- PROJECT_FOLDER_SUFFIX\t: \n-- LIBRARY_OUTPUT_PATH\t\t: .../Project-Template/build/lib\n-- CMAKE_CURRENT_SOURCE_DIR\t: .../Project-Template\n-- ------ ProjectTemplate End Configuration ------\n-- Configuring done\n```\n\n## Usage Example\n```cpp\n#if defined(HAS_USER_INTERFACE) \u0026\u0026 defined(USE_QT)\n//! Qt\n#include \u003cQGuiApplication\u003e\n#include \u003cQQmlApplicationEngine\u003e\n#include \u003cQDebug\u003e\n\nint main(int argc, char *argv[])\n{\n#if QT_VERSION \u003c QT_VERSION_CHECK(6, 0, 0)\n  QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);\n#endif\n\n  QGuiApplication app(argc, argv);\n\n  QQmlApplicationEngine engine;\n  const QUrl url(QStringLiteral(\"qrc:/main.qml\"));\n\n  QObject::connect(\u0026engine, \u0026QQmlApplicationEngine::objectCreated,\n                   \u0026app, [url](QObject *obj, const QUrl \u0026objUrl) {\n    if (!obj \u0026\u0026 url == objUrl)\n      QCoreApplication::exit(-1);\n  }, Qt::QueuedConnection);\n  engine.load(url);\n\n  return app.exec();\n}\n#else\n\n#include \u003ciostream\u003e\n#include \"utilities/featuretest.hpp\"\n\n//! Examples\n#include \"examples/compilertest.hpp\"\n#include \"examples/platformtest.hpp\"\n#include \"examples/librarytest.hpp\"\n#include \"examples/languagetest.hpp\"\n#include \"examples/configtest.hpp\"\n\n//!JSon [Non-STL] Features\n#include \u003cnlohmann/json.hpp\u003e\n\n//!Google Test\n#ifdef USE_GOOGLE_TEST\n#include \u003cgtest/gtest.h\u003e\n\nclass Counter {\npublic:\n  // Returns the current counter value, and increments it.\n  int Increment() {\n    return m_counter++;\n  }\n\n  // Returns the current counter value, and decrements it.\n  // counter can not be less than 0, return 0 in this case\n  int Decrement() {\n    if (m_counter == 0) {\n        return m_counter;\n      } else  {\n        return m_counter--;\n      }\n  }\n\n  // Prints the current counter value to STDOUT.\n  void Print() const {\n    printf(\"%d\", m_counter);\n  }\nprivate:\n  int m_counter;\n};\n\n//TEST UNIT\nTEST(Counter, Increment) {\n  Counter c;\n\n  // Test that counter 0 returns 0\n  EXPECT_EQ(0, c.Decrement());\n\n  // EXPECT_EQ() evaluates its arguments exactly once, so they\n  // can have side effects.\n\n  EXPECT_EQ(0, c.Increment());\n  EXPECT_EQ(1, c.Increment());\n  EXPECT_EQ(2, c.Increment());\n\n  EXPECT_EQ(3, c.Decrement());\n}\n\n#endif\n\n//!Catch2\n#ifdef USE_CATCH2\n# include \u003ccatch2/catch_all.hpp\u003e\n\n#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file\n\nunsigned int Factorial( unsigned int number ) {\n  return number \u003c= 1 ? number : Factorial(number-1)*number;\n}\n\nTEST_CASE( \"Factorials are computed\", \"[factorial]\" ) {\n  REQUIRE( Factorial(1) == 1 );\n  REQUIRE( Factorial(2) == 2 );\n  REQUIRE( Factorial(3) == 6 );\n  REQUIRE( Factorial(10) == 3628800 );\n}\n\n#endif\n\nusing namespace std;\n\nint main()\n{\n  cout \u003c\u003c \"Hello World!\" \u003c\u003c endl;\n\n  //!Config Test\n  ConfigTest config;\n  config.readSettings();\n\n  //!Compiler Test\n  CompilerTest compiler;\n  compiler.getCompilerInfo();\n\n  //!Platform Test\n  PlatformTest platform;\n  platform.getPlatformInfo();\n\n  //!Library Test\n  LibraryTest library;\n  library.testBoost(); // Boost\n\n  //!Language Features\n  LanguageTest language;\n  language.checkFeatures();\n  \n  //!ThirdParty Library\n  ThirdPartyTest thirdPartyTest;\n  thirdPartyTest.testFmt();\n\n  return 0;\n}\n\n#endif\n```\n\n## More usage examples\n- Compiler Test\n```cpp\ncout \u003c\u003c \"Compiler Name : \" \u003c\u003c __COMPILER__ \u003c\u003c endl;\ncout \u003c\u003c \"Compiler Version : \" \u003c\u003c __COMPILER_VER__ \u003c\u003c endl;\n\n#if defined(__COMPILER_CLANG_LLVM_)\n  cout \u003c\u003c \"Clang compiler has been detected!\\n\";\n#elif defined(__COMPILER_INTEL__)\n  cout \u003c\u003c \"Intel compiler has been detected!\\n\";\n#elif defined(__COMPILER_MINGW__)\n  cout \u003c\u003c \"MinGW compiler has been detected!\\n\";\n#elif defined(__COMPILER_MINGW_64__)\n  cout \u003c\u003c \"MinGW64 compiler has been detected!\\n\";\n#elif defined(__COMPILER_GCC__)\n  cout \u003c\u003c \"GCC compiler has been detected!\\n\";\n#elif defined(__COMPILER__HEWLETT_)\n  cout \u003c\u003c \"Hewlett compiler has been detected!\\n\";\n#elif defined(__COMPILER_IBM__)\n  cout \u003c\u003c \"IBM compiler has been detected!\\n\";\n#elif defined(__COMPILER_MSVC__)\n  cout \u003c\u003c \"MSVC compiler has been detected!\\n\";\n#elif defined(__COMPILER_PGCC__)\n  cout \u003c\u003c \"PGCC compiler has been detected!\\n\";\n#elif defined(__COMPILER_ORACLE__)\n  cout \u003c\u003c \"Oracle compiler has been detected!\\n\";\n#endif\n  \n```\n- Platform Test\n```cpp\n#if defined(PLATFORM_MAC)\n  cout \u003c\u003c \"This is macOS platform!\\n\";\n#elif defined(PLATFORM_WINDOWS)\n  cout \u003c\u003c \"This is Windows platform!\\n\";\n#elif defined(PLATFORM_LINUX)\n  cout \u003c\u003c \"This is Linux platform!\\n\";\n#elif defined(PLATFORM_FREEBSD)\n  cout \u003c\u003c \"This is freeBSD platform!\\n\";\n#elif defined(PLATFORM_OPENBSD)\n  cout \u003c\u003c \"This is openBSD platform!\\n\";\n#elif defined(PLATFORM_VXWORKS)\n  cout \u003c\u003c \"This is VXWorks platform!\\n\";\n#elif defined(PLATFORM_MOTOROLA)\n  cout \u003c\u003c \"This is Motorola platform!\\n\";\n#elif defined(PLATFORM_ULTRIX)\n  cout \u003c\u003c \"This is Ultrix platform!\\n\";\n#elif defined(PLATFORM_DOS)\n  cout \u003c\u003c \"This is Dos platform!\\n\";\n#elif defined(PLATFORM_WINDOWS_PHONE)\n  cout \u003c\u003c \"This is Windows Phone platform!\\n\";\n#elif defined(PLATFORM_IOS_SIMULATOR)\n  cout \u003c\u003c \"This is iOS Simulator platform!\\n\";\n#elif defined(PLATFORM_IOS)\n  cout \u003c\u003c \"This is iOS platform!\\n\";\n#elif defined(PLATFORM_APPLE_TV)\n  cout \u003c\u003c \"This is AppleTV platform!\\n\";\n#elif defined(PLATFORM_IWATCH)\n  cout \u003c\u003c \"This is iWatch platform!\\n\";\n#elif defined(PLATFORM_ANDROID)\n  cout \u003c\u003c \"This is Android platform!\\n\";\n#endif\n```\n- Library Test\n```cpp\n#include \"include/common.hpp\"\n#include \u003ciostream\u003e\n\n#ifdef USE_BOOST\n#include \u003cboost/chrono.hpp\u003e\n#endif\n\nLibraryTest::LibraryTest()\n{\n\n}\n\nvoid LibraryTest::testBoost() const noexcept\n{\n  //!Boost Library\n#ifdef USE_BOOST\n  std::cout \u003c\u003c \"Boost version \" \u003c\u003c BOOST_VERSION \u003c\u003c std::endl;\n  std::cout \u003c\u003c \"Boost Lib Clock Test\\n\";\n  boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now();\n  for ( long i = 0; i \u003c 10000000; ++i )\n    std::sqrt( 123.456L ); // burn some time\n  boost::chrono::duration\u003cdouble\u003e sec = boost::chrono::system_clock::now() - start;\n  std::cout \u003c\u003c \"took \" \u003c\u003c sec.count() \u003c\u003c \" seconds\\n\";\n#else\n  std::cout \u003c\u003c \"Boost Library is not available.\\n\";\n#endif\n\n}\n```\n\n- Language Test\n```cpp\n#ifdef USE_FEATURE_TEST\n  if (print.general_features) show(\"C++ GENERAL\", cxx);\n  if (print.cxx11 \u0026\u0026 print.core_features) show(\"C++11 CORE\", cxx11);\n  if (print.cxx14 \u0026\u0026 print.core_features) show(\"C++14 CORE\", cxx14);\n  if (print.cxx14 \u0026\u0026 print.lib_features ) show(\"C++14 LIB\" , cxx14lib);\n  if (print.cxx17 \u0026\u0026 print.core_features) show(\"C++17 CORE\", cxx17);\n  if (print.cxx17 \u0026\u0026 print.lib_features ) show(\"C++17 LIB\" , cxx17lib);\n  if (print.cxx20 \u0026\u0026 print.core_features) show(\"C++20 CORE\", cxx20);\n  if (print.cxx20 \u0026\u0026 print.lib_features ) show(\"C++20 LIB\" , cxx20lib);\n  if (print.cxx23 \u0026\u0026 print.core_features) show(\"C++23 CORE\", cxx23);\n  if (print.cxx23 \u0026\u0026 print.lib_features ) show(\"C++23 LIB\" , cxx23lib);\n  if (print.attributes) show(\"ATTRIBUTES\", attributes);\n#else\n  std::cout \u003c\u003c \"Test Feature is not available.\\n\";\n#endif\n```\n- Config Test\n```cpp\n\n#include \"config.hpp\"\n#include \u003ciostream\u003e\n\n    std::cout \u003c\u003c \"========CONFIG TEST========\" \u003c\u003c std::endl;\n    std::cout \u003c\u003c \"Project Name : \"          \u003c\u003c PROJECT_NAME \u003c\u003c std::endl;\n    std::cout \u003c\u003c \"Project Description : \"   \u003c\u003c PROJECT_DESCRIPTION \u003c\u003c std::endl;\n    std::cout \u003c\u003c \"Project Homepage Url : \"  \u003c\u003c PROJECT_HOMEPAGE_URL \u003c\u003c std::endl;\n    std::cout \u003c\u003c \"Project Language : \"      \u003c\u003c PROJECT_LANGUAGES \u003c\u003c std::endl;\n    std::cout \u003c\u003c \"Project Full Version : \"  \u003c\u003c PROJECT_VERSION_STRING \u003c\u003c std::endl;\n    std::cout \u003c\u003c \"Project Creator : \"       \u003c\u003c PROJECT_CREATOR \u003c\u003c std::endl;\n    std::cout \u003c\u003c \"Project License Type : \"  \u003c\u003c PROJECT_LICENSE_TYPE \u003c\u003c std::endl;\n    std::cout \u003c\u003c \"========CONFIG TEST========\" \u003c\u003c std::endl;\n  \n```\n## If you want donate, Bitcoin address is here! \u003c3\n\u003cimg width=\"368\" alt=\"Screenshot 2022-11-12 at 9 25 49 AM\" src=\"https://user-images.githubusercontent.com/4066299/201459675-f3c0d09e-f308-4fa6-9be2-60a4bd81212e.png\"\u003e\n\n## TOOD\n- Bug fixing.\n- Add new exception handler.\n- Add new features.\n- Support new libraries.\n- Tell me your opinion about which other items should be added.\n\n## Contribution\n- Bug fixes, docs, and enhancements welcome! Please let me know kambiz.ceo@gmail.com\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgenyleap%2Fproject-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgenyleap%2Fproject-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgenyleap%2Fproject-template/lists"}