{"id":37084,"date":"2019-10-31T22:15:40","date_gmt":"2019-10-31T19:15:40","guid":{"rendered":"https:\/\/prohoster.info\/blog\/c-i-cmake-bratya-navek-chast-ii\/"},"modified":"2019-10-31T22:15:40","modified_gmt":"2019-10-31T19:15:40","slug":"c-i-cmake-bratya-navek-chast-ii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/c-i-cmake-bratya-navek-chast-ii","title":{"rendered":"C++ un CMake \u2014 m\u016b\u017e\u012bgie br\u0101\u013ci, 2. da\u013ca","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"C++ un CMake \u2014 m\u016b\u017e\u012bgie br\u0101\u013ci, 2. da\u013ca\" src=\"\/wp-content\/uploads\/2019\/08\/1d86b8b1668ae29ff3e634df9059d9b1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/461817\/\">Iepriek\u0161\u0113j\u0101 da\u013c\u0101<\/a><\/noindex> \u0160aj\u0101 interesantaj\u0101 st\u0101st\u0101 tika run\u0101ts par galvenes bibliot\u0113kas organiz\u0101ciju CMake sist\u0113mu \u0123ener\u0101tora ietvaros.<\/p>\n<p><\/p>\n<p>\u0160oreiz pievienosim tai kompil\u0113jamu bibliot\u0113ku un apspried\u012bsim modu\u013cu savstarp\u0113jo kompoz\u012bciju.<\/p>\n<p><\/p>\n<blockquote><p>K\u0101 jau iepriek\u0161, tie, kuriem nav paciet\u012bbas, var uzreiz <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/izvolov\/mylib\">p\u0101riet uz atjaunoto repozitoriju<\/a><\/noindex> un visu aptaust\u012bt ar sav\u0101m rok\u0101m.<\/p><\/blockquote>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" name=\"contents\"><\/a><\/noindex><\/p>\n<h2>Satel\u012bte<\/h2>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"#divide\">Dal\u012bties<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#impera\">Kaut ko sasniegt<\/a><\/noindex><\/li>\n<\/ol>\n<p>\n<noindex><a rel=\"nofollow\" name=\"divide\"><\/a><\/noindex><\/p>\n<h2><noindex><a rel=\"nofollow\" href=\"#contents\">Dal\u012bties<\/a><\/noindex><\/h2>\n<p><\/p>\n<p>Pirmais, kas j\u0101dara, lai sasniegtu m\u016bsu augsto m\u0113r\u0137i, ir sadal\u012bt izstr\u0101d\u0101jamo programmat\u016bru univers\u0101los izol\u0113tos blokos, kuri ir vienveid\u012bgi lietot\u0101ja ac\u012bs.<\/p>\n<p><\/p>\n<p>Pirmaj\u0101 da\u013c\u0101 tika aprakst\u012bts t\u0101ds standarta bloks \u2014 projekts ar galvenes bibliot\u0113ku. Tagad pievienosim m\u016bsu projektam kompil\u0113jamu bibliot\u0113ku.<\/p>\n<p><\/p>\n<p>T\u0101p\u0113c izvirz\u012bsim funkcijas <code>myfunc<\/code> \u012bstenojumu atsevi\u0161\u0137\u0101 <code>.cpp<\/code>-fail\u0101:<\/p>\n<p><\/p>\n<pre><code class=\"diff\">diff --git a\/include\/mylib\/myfeature.hpp b\/include\/mylib\/myfeature.hpp\nindex 43db388..ba62b4f 100644\n--- a\/include\/mylib\/myfeature.hpp\n+++ b\/include\/mylib\/myfeature.hpp\n@@ -46,8 +46,5 @@ namespace mylib\n\n         ~  see mystruct\n      *\/\/\n-    inline bool myfunc (mystruct)\n-    {\n-        return true;\n-    }\n+    bool myfunc (mystruct);\n }\ndiff --git a\/src\/mylib\/myfeature.cpp b\/src\/mylib\/myfeature.cpp\nnew file mode 100644\nindex 0000000..abb5004\n--- \/dev\/null\n+++ b\/src\/mylib\/myfeature.cpp\n@@ -0,0 +1,9 @@\n+#include \n+\n+namespace mylib\n+{\n+    bool myfunc (mystruct)\n+    {\n+        return true;\n+    }\n+}<\/code><\/pre>\n<p><\/p>\n<p>P\u0113c tam noteiksim kompil\u0113jamo bibliot\u0113ku (<code>myfeature<\/code>), kas b\u016bs sast\u0101v\u0113jusi no iepriek\u0161\u0113j\u0101 sol\u012b ieg\u016bt\u0101 <code>.cpp<\/code>-faila. Jaunajai bibliot\u0113kai, ac\u012bmredzot, nepiecie\u0161amas jau eso\u0161\u0101s galvenes, un lai to nodro\u0161in\u0101tu, tai ir j\u0101b\u016bt savienotai ar eso\u0161o m\u0113r\u0137i <code>mylib<\/code>. Turkl\u0101t savienojums starp t\u0101m ir publisks, un tas noz\u012bm\u0113, ka viss, kam pievienota m\u0113r\u0137is <code>myfeature<\/code>, autom\u0101tiski ieg\u016bs ar\u012b m\u0113r\u0137i <code>mylib<\/code> (<noindex><a rel=\"nofollow\" href=\"https:\/\/cmake.org\/cmake\/help\/v3.14\/command\/target_link_libraries.html#libraries-for-a-target-and-or-its-dependents\">vair\u0101k par savienojuma veidiem<\/a><\/noindex>). <\/p>\n<p><\/p>\n<pre><code class=\"diff\">diff --git a\/CMakeLists.txt b\/CMakeLists.txt\nindex 108045c..0de77b8 100644\n--- a\/CMakeLists.txt\n+++ b\/CMakeLists.txt\n@@ -64,6 +64,17 @@ target_compile_features(mylib INTERFACE cxx_std_17)\n\n add_library(Mylib::mylib ALIAS mylib)\n\n+###################################################################################################\n+##\n+##      Kompil\u0113jama bibliot\u0113ka\n+##\n+###################################################################################################\n+\n+add_library(myfeature src\/mylib\/myfeature.cpp)\n+target_link_libraries(myfeature PUBLIC mylib)\n+\n+add_library(Mylib::myfeature ALIAS myfeature)\n+<\/code><\/pre>\n<p><\/p>\n<p>T\u0101l\u0101k dar\u012bsim t\u0101, lai jaun\u0101 bibliot\u0113ka ar\u012b tiktu instal\u0113ta sist\u0113m\u0101:<\/p>\n<p><\/p>\n<pre><code class=\"diff\">@@ -72,7 +83,7 @@ add_library(Mylib::mylib ALIAS mylib)\n\n install(DIRECTORY include\/mylib DESTINATION include)\n\n-install(TARGETS mylib EXPORT MylibConfig)\n+install(TARGETS mylib myfeature EXPORT MylibConfig)\n install(EXPORT MylibConfig NAMESPACE Mylib:: DESTINATION share\/Mylib\/cmake)\n\n include(CMakePackageConfigHelpers)<\/code><\/pre>\n<p><\/p>\n<p>J\u0101\u0146em v\u0113r\u0101, ka m\u0113r\u0137im <code>myfeature<\/code>, k\u0101 ar\u012b <code>mylib<\/code> tika tika ar prefiksu <code>Mylib::<\/code>. Tas pats ir nor\u0101d\u012bts abiem m\u0113r\u0137iem, eksport\u0113jot tos sist\u0113mas uzst\u0101d\u012b\u0161anai. Tas nodro\u0161ina vienm\u0113r\u012bgu darbu ar m\u0113r\u0137iem jebkur\u0101 <noindex><a rel=\"nofollow\" href=\"#impera\">saist\u012b\u0161anas sh\u0113m\u0101<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>P\u0113c tam palika saist\u012bt modu\u013cu testus ar jauno bibliot\u0113ku (funkciju <code>myfunc<\/code> iz\u0146emta no galvenes, t\u0101p\u0113c tagad nepiecie\u0161ams to saist\u012bt):<\/p>\n<p><\/p>\n<pre><code class=\"diff\">diff --git a\/test\/CMakeLists.txt b\/test\/CMakeLists.txt\nindex 5620be4..bc1266c 100644\n--- a\/test\/CMakeLists.txt\n+++ b\/test\/CMakeLists.txt\n@@ -4,7 +4,7 @@ add_executable(mylib-unit-tests test_main.cpp)\n target_sources(mylib-unit-tests PRIVATE mylib\/myfeature.cpp)\n target_link_libraries(mylib-unit-tests\n     PRIVATE\n-        Mylib::mylib\n+        Mylib::myfeature\n         doctest::doctest\n )<\/code><\/pre>\n<p><\/p>\n<p>Galvenes (<code>Mylib::mylib<\/code>) tagad nav j\u0101iek\u013cauj atsevi\u0161\u0137i, jo, k\u0101 jau teikts, t\u0101s autom\u0101tiski tiek iek\u013cautas kop\u0101 ar bibliot\u0113ku (<code>Mylib::myfeature<\/code>).<\/p>\n<p><\/p>\n<p>Un pievienosim p\u0101ris nianses, lai nodro\u0161in\u0101tu p\u0101rkl\u0101juma m\u0113r\u012bjumus, \u0146emot v\u0113r\u0101 jaunieg\u016bto bibliot\u0113ku:<\/p>\n<p><\/p>\n<pre><code class=\"diff\">@@ -15,11 +15,16 @@ if(MYLIB_COVERAGE AND GCOVR_EXECUTABLE)\n     target_compile_options(mylib-unit-tests PRIVATE --coverage)\n     target_link_libraries(mylib-unit-tests PRIVATE gcov)\n\n+    target_compile_options(myfeature PRIVATE --coverage)\n+    target_link_libraries(myfeature PRIVATE gcov)\n+\n     add_custom_target(coverage\n         COMMAND\n             ${GCOVR_EXECUTABLE}\n-                --root=${PROJECT_SOURCE_DIR}\/include\/\n-                --object-directory=${CMAKE_CURRENT_BINARY_DIR}\n+                --root=${PROJECT_SOURCE_DIR}\/\n+                --filter=${PROJECT_SOURCE_DIR}\/include\n+                --filter=${PROJECT_SOURCE_DIR}\/src\n+                --object-directory=${PROJECT_BINARY_DIR}\n         DEPENDS\n             check\n     )<\/code><\/pre>\n<p><\/p>\n<p>Var pievienot vair\u0101k bibliot\u0113ku, izpild\u0101m\u0101s failus utt. Svar\u012bgi ir tas, k\u0101 tie ir savienoti sav\u0101 starp\u0101 projekta ietvaros. Svar\u012bgi ir tikai tas, kuri m\u0113r\u0137i ir m\u016bsu modu\u013ca saskarne, proti, kas ir redzams \u0101rpus\u0113.<\/p>\n<p>\n<noindex><a rel=\"nofollow\" name=\"impera\"><\/a><\/noindex><\/p>\n<h2><noindex><a rel=\"nofollow\" href=\"#contents\">Kaut ko sasniegt<\/a><\/noindex><\/h2>\n<p><\/p>\n<p>Tagad mums ir standarta modu\u013ci-bloki, un m\u0113s varam tiem vald\u012bt: sast\u0101v\u0113t no tiem strukt\u016bru jebk\u0101das sare\u017e\u0123\u012bt\u012bbas, uzst\u0101dot tos sist\u0113m\u0101 vai saistot sav\u0101 starp\u0101 vienotaj\u0101 b\u016bvniec\u012bbas sist\u0113m\u0101.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-v-sistemu\">Uzst\u0101d\u012b\u0161ana sist\u0113m\u0101<\/h3>\n<p><\/p>\n<p>Viena no modu\u013ca lieto\u0161anas iesp\u0113j\u0101m ir uzst\u0101d\u012bt m\u016bsu moduli sist\u0113m\u0101.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">cmake --build ce\u013c\u0161\/uz\/b\u016bves\/mapi --target install<\/code><\/pre>\n<p><\/p>\n<p>P\u0113c tam to var iek\u013caut jebkur\u0101 cit\u0101 projekt\u0101 ar komandu <noindex><a rel=\"nofollow\" href=\"https:\/\/cmake.org\/cmake\/help\/v3.14\/command\/find_package.html\"><code>find_package<\/code><\/a><\/noindex>.<\/p>\n<p><\/p>\n<pre><code class=\"cmake\">find_package(Mylib 1.0 REQUIRED)<\/code><\/pre>\n<p><\/p>\n<h3 id=\"podklyuchenie-v-kachestve-podmodulya\">Iek\u013cau\u0161ana k\u0101 apak\u0161modulis<\/h3>\n<p><\/p>\n<p>V\u0113l viena iesp\u0113ja ir pievienot m\u016bsu projekta mapes citiem projektiem k\u0101 apak\u0161moduli ar komandu <noindex><a rel=\"nofollow\" href=\"https:\/\/cmake.org\/cmake\/help\/v3.14\/command\/add_subdirectory.html\"><code>add_subdirectory<\/code><\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"ispolzovanie\">Izmanto\u0161ana<\/h3>\n<p><\/p>\n<p>Sist\u0113mas saist\u012b\u0161anas veidi at\u0161\u0137iras, ta\u010du rezult\u0101ts ir viens un tas pats. Gan vien\u0101, gan otr\u0101 gad\u012bjum\u0101 projekt\u0101, kas izmanto m\u016bsu moduli, b\u016bs pieejami m\u0113r\u0137i <code>Mylib::myfeature<\/code> un <code>Mylib::mylib<\/code>, kurus var izmantot, piem\u0113ram, \u0161\u0101d\u0101 veid\u0101:<\/p>\n<p><\/p>\n<pre><code class=\"cmake\">add_executable(some_executable some.cpp sources.cpp)\ntarget_link_libraries(some_executable PRIVATE Mylib::myfeature)<\/code><\/pre>\n<p><\/p>\n<p>Konkr\u0113taj\u0101 gad\u012bjum\u0101 bibliot\u0113ku <code>Mylib::myfeature<\/code> j\u0101ievie\u0161 tikai tad, kad nepiecie\u0161ams saist\u012bties ar bibliot\u0113ku <code>libmyfeature<\/code>. Ja pietiek ar virsrakstiem, tad ir v\u0113rts izmantot bibliot\u0113ku <code>Mylib::mylib<\/code>.<\/p>\n<p><\/p>\n<p>CMake m\u0113r\u0137i var b\u016bt vilt\u012bgi, piem\u0113ram, paredz\u0113ti tikai \u012bpa\u0161\u012bbu, atkar\u012bbu u.c. p\u0101rne\u0161anai. Tom\u0113r darbs ar tiem notiek vienoti.<\/p>\n<p><\/p>\n<p>Ko ar\u012b vajadz\u0113ja ieg\u016bt.<\/p>\n<p>Avots: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463295\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u043e\u0431 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u0438\u0441\u0442\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0438 CMake. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a \u043d\u0435\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c. \u041a\u0430\u043a \u0438 \u043f\u0440\u0435\u0436\u0434\u0435, \u0442\u0435\u043c, \u043a\u043e\u043c\u0443 \u043d\u0435 \u0442\u0435\u0440\u043f\u0438\u0442\u0441\u044f, \u043c\u043e\u0433\u0443\u0442 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u043f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0432\u0441\u0451 \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438. \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0439 \u0412\u043b\u0430\u0441\u0442\u0432\u0443\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27802,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37084","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/c-i-cmake-bratya-navek-chast-ii\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47C++ \u0438 CMake \u2014 \u0431\u0440\u0430\u0442\u044c\u044f \u043d\u0430\u0432\u0435\u043a, \u0447\u0430\u0441\u0442\u044c II | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/c-i-cmake-bratya-navek-chast-ii\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:15:40+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:15:40+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47C++ un CMake \u2014 br\u0101\u013ci uz m\u016b\u017e\u012bbu, 2. da\u013ca | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/c-i-cmake-bratya-navek-chast-ii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47C++ \u0438 CMake \u2014 \u0431\u0440\u0430\u0442\u044c\u044f \u043d\u0430\u0432\u0435\u043a, \u0447\u0430\u0441\u0442\u044c II | ProHoster","og:url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/c-i-cmake-bratya-navek-chast-ii","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:15:40+00:00","article:modified_time":"2019-10-31T19:15:40+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37084","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 06:02:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:33:25","updated":"2026-01-22 06:02:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/37084","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=37084"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/37084\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/27802"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=37084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=37084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=37084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}