{"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\/de\/blog\/administrirovanie\/c-i-cmake-bratya-navek-chast-ii","title":{"rendered":"C++ und CMake \u2013 Br\u00fcder f\u00fcr immer, Teil II","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"C++ und CMake \u2013 Br\u00fcder f\u00fcr immer, Teil II\" 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\/\">Im vorherigen Teil<\/a><\/noindex> In dieser spannenden Erz\u00e4hlung ging es um die Organisation einer Header-Bibliothek im Rahmen des CMake-Build-Systems.<\/p>\n<p><\/p>\n<p>Diesmal f\u00fcgen wir eine kompilierbare Bibliothek hinzu und sprechen auch \u00fcber die Anordnung der Module untereinander.<\/p>\n<p><\/p>\n<blockquote><p>Wie immer k\u00f6nnen die Ungeduldigen sofort <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/izvolov\/mylib\">zum aktualisierten Repository wechseln<\/a><\/noindex> und alles mit eigenen H\u00e4nden ausprobieren.<\/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>Inhalt<\/h2>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"#divide\">Teile<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#impera\">Herrsche<\/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\">Teile<\/a><\/noindex><\/h2>\n<p><\/p>\n<p>Das erste, was wir tun m\u00fcssen, um unser hohes Ziel zu erreichen, ist, die zu entwickelnde Software in universelle isolierte Bl\u00f6cke zu unterteilen, die aus Sicht des Benutzers einheitlich sind.<\/p>\n<p><\/p>\n<p>Im ersten Teil wurde ein solcher Standardblock beschrieben - ein Projekt mit einer Header-Bibliothek. Jetzt f\u00fcgen wir unserem Projekt eine kompilierbare Bibliothek hinzu.<\/p>\n<p><\/p>\n<p>Dazu ziehen wir die Implementierung der Funktion <code>myfunc<\/code> in eine separate <code>.cpp<\/code>-Datei:<\/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         ~  siehe 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>Dann definieren wir die kompilierbare Bibliothek (<code>myfeature<\/code>), die aus der zuvor erhaltenen <code>.cpp<\/code>-Datei bestehen wird. Offensichtlich ben\u00f6tigt die neue Bibliothek bereits vorhandene Header, und um dies zu gew\u00e4hrleisten, sollte sie mit dem bestehenden Ziel <code>mylib<\/code>verkoppelt werden. Die Verkoppelung zwischen ihnen ist \u00f6ffentlich, was bedeutet, dass alles, was mit dem Ziel verbunden wird, automatisch auch das Ziel erh\u00e4lt. <code>myfeature<\/code>Weitere Informationen zu den Verkoppelungsm\u00f6glichkeiten <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\">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+##      Kompilierbare Bibliothek\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+<\/a><\/noindex>). <\/p>\n<p><\/p>\n<pre><code class=\"diff\">Dann lassen wir die neue Bibliothek ebenfalls im System installieren:<\/code><\/pre>\n<p><\/p>\n<p>@@ -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)<\/p>\n<p><\/p>\n<pre><code class=\"diff\">Es ist zu beachten, dass f\u00fcr das Ziel<\/code><\/pre>\n<p><\/p>\n<p>, wie auch f\u00fcr <code>myfeature<\/code>, wie auch f\u00fcr <code>mylib<\/code> Es wurde ein Pseudonym mit einem Pr\u00e4fix eingerichtet <code>Mylib::<\/code>. Dasselbe ist f\u00fcr beide Ziele beim Exportieren in das System festgelegt. Dies erm\u00f6glicht eine einheitliche Arbeit mit den Zielen bei jeder <noindex><a rel=\"nofollow\" href=\"#impera\">Bindungsstruktur<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Danach blieb es, die Modultests mit der neuen Bibliothek zu verkn\u00fcpfen (die Funktion <code>myfunc<\/code> wurde aus dem Header herausgenommen, sodass jetzt eine Verlinkung erforderlich ist):<\/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>Die Header (<code>Mylib::mylib<\/code>) m\u00fcssen jetzt nicht mehr separat eingebunden werden, da sie, wie bereits erw\u00e4hnt, automatisch mit der Bibliothek eingebunden werden (<code>Mylib::myfeature<\/code>).<\/p>\n<p><\/p>\n<p>Und wir f\u00fcgen ein paar Nuancen hinzu, um die Messungen der Codeabdeckung unter Ber\u00fccksichtigung der neu hinzugekommenen Bibliothek zu gew\u00e4hrleisten:<\/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>Es k\u00f6nnen weitere Bibliotheken, ausf\u00fchrbare Dateien usw. hinzugef\u00fcgt werden. Dabei ist es unwichtig, wie sie im Rahmen des Projekts miteinander verkn\u00fcpft sind. Wichtig ist nur, welche Ziele als Schnittstelle unseres Moduls fungieren, also nach au\u00dfen sichtbar sind.<\/p>\n<p>\n<noindex><a rel=\"nofollow\" name=\"impera\"><\/a><\/noindex><\/p>\n<h2><noindex><a rel=\"nofollow\" href=\"#contents\">Herrsche<\/a><\/noindex><\/h2>\n<p><\/p>\n<p>Jetzt haben wir Standardmodul-Bl\u00f6cke, und wir k\u00f6nnen sie beherrschen: Sie zu einer beliebigen komplexen Struktur zusammenzustellen, sie im System zu installieren oder sie innerhalb eines gemeinsamen Build-Systems zu verlinken.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-v-sistemu\">Installation im System<\/h3>\n<p><\/p>\n<p>Eine M\u00f6glichkeit, das Modul zu nutzen \u2014 unser Modul im System zu installieren.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">cmake --build pfad\/zum\/build\/verzeichnis --target install<\/code><\/pre>\n<p><\/p>\n<p>Danach kann es in jedem anderen Projekt mit dem Befehl <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\">Einbindung als Submodul<\/h3>\n<p><\/p>\n<p>Eine andere M\u00f6glichkeit \u2014 den Ordner mit unserem Projekt im Rahmen eines anderen Projekts als Submodul mit dem Befehl einzubinden <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\">Verwendung<\/h3>\n<p><\/p>\n<p>Die Bindungsmethoden sind unterschiedlich, aber das Ergebnis ist dasselbe. In beiden F\u00e4llen sind in dem Projekt, das unser Modul verwendet, die Ziele verf\u00fcgbar <code>Mylib::myfeature<\/code> und <code>Mylib::mylib<\/code>, die beispielsweise so verwendet werden k\u00f6nnen:<\/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>Speziell in unserem Fall muss die Bibliothek <code>Mylib::myfeature<\/code> eingebunden werden, wenn es notwendig ist, sich mit der Bibliothek zu verlinken <code>libmyfeature<\/code>. Wenn nur die Header-Dateien ausreichend sind, sollte man die Bibliothek verwenden <code>Mylib::mylib<\/code>.<\/p>\n<p><\/p>\n<p>CMake-Ziele k\u00f6nnen trickreich sein, zum Beispiel nur daf\u00fcr vorgesehen, um bestimmte Eigenschaften, Abh\u00e4ngigkeiten usw. weiterzugeben. Der Umgang mit ihnen erfolgt dabei einheitlich.<\/p>\n<p><\/p>\n<p>Was gefordert war.<\/p>\n<p>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/c-i-cmake-bratya-navek-chast-ii\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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++ und CMake \u2014 Br\u00fcder f\u00fcr immer, Teil II | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/c-i-cmake-bratya-navek-chast-ii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/37084","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=37084"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/37084\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/27802"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=37084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=37084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=37084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}