{"id":2027,"date":"2021-01-03T14:35:51","date_gmt":"2021-01-03T14:35:51","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2027"},"modified":"2021-11-03T21:31:00","modified_gmt":"2021-11-03T21:31:00","slug":"uygulama-izleme-yazilimi-2-baslangic","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/","title":{"rendered":"Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 &#8211; Ba\u015flang\u0131\u00e7"},"content":{"rendered":"<p>Yaz\u0131 dizisinin di\u011fer yaz\u0131lar\u0131:<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2020\/12\/16\/uygulama-izleme-yazilimi\/\">Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131<\/a><\/strong><\/span><\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/\">Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 &#8211; Ba\u015flang\u0131\u00e7<\/a><\/strong><\/span><\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/25\/uygulama-izleme-yazilimi-serisi-3-birim-test\/\">Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 3 &#8211; Utility, Birim Testler, S\u00fcrekli Entegrasyon<\/a><\/strong><\/span><\/p>\n<p><span style=\"color: #339966;\"><strong><a style=\"color: #339966;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/03\/20\/amt-4-qt-ayarlamalari\/\"><span style=\"color: #008000;\">Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 4 &#8211; Qt Ayarlamalar\u0131<\/span><\/a><\/strong><\/span><\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/11\/03\/uygulama-izleme-yazilimi-5-amt-v1-0\/\">Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 5 &#8211; AMT v1.0<\/a><\/strong><\/span><\/p>\n<p style=\"text-align: left;\">Evet dostlar, Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 (Application Monitor Tool, AMT) i\u00e7in art\u0131k demir alma vakti geldi, ba\u015flang\u0131\u00e7 haz\u0131rl\u0131klar\u0131 tamamland\u0131. \u015eimdi neler yapt\u0131\u011f\u0131m\u0131za bir g\u00f6z atal\u0131m.<\/p>\n<p>Bildi\u011finiz \u00fczere daha \u00f6nce geli\u015ftirdi\u011fim ve sizler ile payla\u015ft\u0131\u011f\u0131m kod par\u00e7alar\u0131 i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/yazilimperver\">github&#8217;<\/a>\u0131<\/strong> <\/span>kullan\u0131yordum (halen de kullan\u0131yorum). Bu uygulama i\u00e7in ise <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/gitlab.com\/yazilimperver\">Gitlab&#8217;\u0131<\/a> <\/span><\/strong>kullan\u0131yor olaca\u011f\u0131m. Daha \u00f6nce bir ka\u00e7 farkl\u0131 uygulama i\u00e7in gitlab&#8217;\u0131 kullanma f\u0131rsat\u0131m oldu ve genel olarak izlenimlerim olumluydu. Bu uygulama i\u00e7in de, neden onu kulland\u0131\u011f\u0131m\u0131 birazdan sizler ile payla\u015faca\u011f\u0131m.<\/p>\n<p>Yaz\u0131lar\u0131m\u0131 \u00e7ok uzun tutmadan, aktarmak istedi\u011fim konular\u0131 sizlere aktar\u0131p, detaylar i\u00e7in belki ayr\u0131 yaz\u0131lar yaz\u0131yor olabiliriz. Bakal\u0131m duruma g\u00f6re de\u011ferlendirece\u011fiz art\u0131k. Bu arada bir \u00f6nceki yaz\u0131mda de\u011findim mi bilmiyorum ama bu yaz\u0131 dizinin salt amac\u0131, tasar\u0131msal ya da mimarisel olarak m\u00fckemmel bir uygulama ortaya koymak de\u011fil (tabi \u00e7ok da ba\u015ftan savma olmayacak \ud83d\ude42 . Bundan ziyade, ama\u00e7lanan kabiliyetleri, ilgili teknolojileri kullanarak nas\u0131l geli\u015ftirebilirize bak\u0131yor olaca\u011f\u0131z.<\/p>\n<p>Gelelim bu yaz\u0131mda de\u011finece\u011fim konulara:<\/p>\n<ul>\n<li><strong>Proje dizin yap\u0131s\u0131,<\/strong>\n<ul>\n<li>\u00d6rnek bir projeyi nas\u0131l yap\u0131land\u0131rabiliriz,<\/li>\n<\/ul>\n<\/li>\n<li><strong>Gitlab,<\/strong>\n<ul>\n<li>Gitlab nedir? Alternatifleri neler? Neden gitlab?<\/li>\n<\/ul>\n<\/li>\n<li><strong>CMake,<\/strong>\n<ul>\n<li>Proje dizin yap\u0131s\u0131na g\u00f6re CMake dosyalar\u0131n\u0131n konu\u015fland\u0131r\u0131lmas\u0131. CMake ile ilgili bir tak\u0131m ipu\u00e7lar\u0131 ve 3. parti k\u00fct\u00fcphaneleri CMake ile nas\u0131l kullanabiliriz.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Proje dizin yap\u0131s\u0131 ile ba\u015flayal\u0131m.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Proje Dizin Yap\u0131s\u0131<\/span><\/strong><\/h2>\n<p>Proje dizin yap\u0131s\u0131 asl\u0131na bakarsan\u0131z, \u00e7o\u011fu zaman projelere ba\u015flarken pek \u00fczerinde d\u00fc\u015f\u00fcn\u00fclmeyen ama projenin b\u00fcy\u00fckl\u00fc\u011f\u00fc artt\u0131k\u00e7a, kendini hissettirmeye ba\u015flayan bir konu. Bu noktada da bence en \u00f6nemli iki kriter, ilgili proje dizin yaps\u0131n\u0131n projenin ilerleyen s\u00fcre\u00e7lerinde de <strong>idame edilebilmes<\/strong>i ve geli\u015ftiricilerin bu yap\u0131ya <strong>a\u015final\u0131\u011f\u0131\/kendilerini rahat hissedip\/hissetmedikleri<\/strong>. \u015eunu da ilave etmekte fayda var ki, b\u00fct\u00fcn projeler i\u00e7in tek bir yap\u0131 yok, genelde ihtiya\u00e7lar do\u011frultusunda bu yap\u0131 \u00f6zelle\u015fiyor. Hatta, kulland\u0131k\u00e7a, geri bildirimler \u0131\u015f\u0131\u011f\u0131nda siz de g\u00fcncelliyor olabilirsiniz. Buradaki \u00f6nerim, sizlere iyi bir ba\u015flang\u0131\u00e7 sa\u011flayaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcyorum.<\/p>\n<p>Elbette bunlar benim kriterlerim, bunlar\u0131n d\u0131\u015f\u0131nda da, internet \u00fczerinde de, bu konuda bir \u00e7ok kaynak var. Bu ikisinin yan\u0131nda, a\u015fa\u011f\u0131daki gibi kriterleri de g\u00f6z \u00f6n\u00fcnde bulundurmakta fayda var:<\/p>\n<ul>\n<li>Projenin b\u00fcy\u00fckl\u00fc\u011f\u00fc,<\/li>\n<li>\u00dc\u00e7\u00fcnc\u00fc parti k\u00fct\u00fcphaneler,<\/li>\n<li>Test kodlar\u0131,<\/li>\n<li>\u00c7oklu platform deste\u011fi,<\/li>\n<li>S\u00fcrekli entegrasyon deste\u011fi,<\/li>\n<li>K\u00fct\u00fcphane\/\u00e7al\u0131\u015ft\u0131r\u0131labilir kod konfig\u00fcrasyonlar\u0131,<\/li>\n<li>Betik dosyalar\u0131, vb.<\/li>\n<\/ul>\n<p>Gelelim bizim AMT i\u00e7in ilk etapta olu\u015fturdum dizin yap\u0131s\u0131na. Dizin yap\u0131s\u0131 a\u015fa\u011f\u0131daki gibi (bu arada a\u015fa\u011f\u0131daki gibi bir g\u00f6sterim i\u00e7in &#8220;tree&#8221; komutunu kullanabilirsiniz, dosyalar\u0131 da g\u00f6rmek i\u00e7in \/F ekleyebilirsiniz):<\/p>\n<pre class=\"lang:ps decode:true\">root\r\n\u251c\u2500\u2500\u2500binary\r\n\u251c\u2500\u2500\u2500build\r\n\u251c\u2500\u2500\u2500data\r\n\u251c\u2500\u2500\u2500doc\r\n\u251c\u2500\u2500\u2500ext\r\n\u2502   \u2514\u2500\u2500\u2500googletest-master\r\n\u2502       \u251c\u2500\u2500\u2500ci\r\n\u2502       \u251c\u2500\u2500\u2500googlemock\r\n\u2502       \u2502   \u251c\u2500\u2500\u2500cmake\r\n\u2502       \u2502   \u251c\u2500\u2500\u2500docs\r\n\u2502       \u2502   \u251c\u2500\u2500\u2500include\r\n\u2502       \u2502   \u2502   \u2514\u2500\u2500\u2500gmock\r\n\u2502       \u2502   \u2502       \u2514\u2500\u2500\u2500internal\r\n\u2502       \u2502   \u2502           \u2514\u2500\u2500\u2500custom\r\n\u2502       \u2502   \u251c\u2500\u2500\u2500scripts\r\n\u2502       \u2502   \u2502   \u2514\u2500\u2500\u2500generator\r\n\u2502       \u2502   \u2502       \u2514\u2500\u2500\u2500cpp\r\n\u2502       \u2502   \u251c\u2500\u2500\u2500src\r\n\u2502       \u2502   \u2514\u2500\u2500\u2500test\r\n\u2502       \u2514\u2500\u2500\u2500googletest\r\n\u2502           \u251c\u2500\u2500\u2500cmake\r\n\u2502           \u251c\u2500\u2500\u2500docs\r\n\u2502           \u251c\u2500\u2500\u2500include\r\n\u2502           \u2502   \u2514\u2500\u2500\u2500gtest\r\n\u2502           \u2502       \u2514\u2500\u2500\u2500internal\r\n\u2502           \u2502           \u2514\u2500\u2500\u2500custom\r\n\u2502           \u251c\u2500\u2500\u2500samples\r\n\u2502           \u251c\u2500\u2500\u2500scripts\r\n\u2502           \u2502   \u2514\u2500\u2500\u2500test\r\n\u2502           \u251c\u2500\u2500\u2500src\r\n\u2502           \u2514\u2500\u2500\u2500test\r\n\u251c\u2500\u2500\u2500include\r\n\u2502   \u2514\u2500\u2500\u2500Utility\r\n\u251c\u2500\u2500\u2500src\r\n\u2502   \u2514\u2500\u2500\u2500Utility\r\n\u2514\u2500\u2500\u2500test\r\n    \u2514\u2500\u2500\u2500Utility<\/pre>\n<p>\u015eimdi h\u0131zl\u0131ca bu dizinlere bir bakal\u0131m.<\/p>\n<ul>\n<li><strong>binary:<\/strong> \u00e7al\u0131\u015ft\u0131r\u0131labilir kodlar\u0131n (.exe) bulunaca\u011f\u0131 dizin<\/li>\n<li><strong>build:<\/strong> proje ve olu\u015fturma dosyalar\u0131n\u0131n (cmake ile olu\u015fturulan) konu\u015flanaca\u011f\u0131 dizin. A\u00e7\u0131k\u00e7as\u0131 daha \u00f6nce, CMake kullanmadan \u00f6nce, bunun yerine &#8220;project&#8221; gibi bir dizin kullan\u0131yordum VS dosyalar\u0131 i\u00e7in<\/li>\n<li><strong>data:<\/strong> verilerin konu\u015flanaca\u011f\u0131 dizin<\/li>\n<li><strong>doc:<\/strong> dok\u00fcmanlar\u0131n bulunaca\u011f\u0131 dizin<\/li>\n<li><strong>ext:<\/strong> 3. parti d\u0131\u015f k\u00fct\u00fcphanelerin bulunaca\u011f\u0131 dizin<\/li>\n<li><strong>include:<\/strong> ba\u015fl\u0131k dosyalar\u0131n\u0131n bulunaca\u011f\u0131 dizin. A\u00e7\u0131k\u00e7as\u0131, bu uygulama i\u00e7in ba\u015fl\u0131k ve kaynak dosylar\u0131n\u0131 ayr\u0131 dizine koymaya karar verdim. \u0130kisinin dizin yap\u0131s\u0131 birbirine benziyor olacak<\/li>\n<li><strong>src:<\/strong> kaynak dosyalar\u0131n\u0131n bulunaca\u011f\u0131 dizin<\/li>\n<li><strong>test:<\/strong> ilgili birim testlerinin bulunaca\u011f\u0131 dizin.<\/li>\n<\/ul>\n<p>Dosyalar\u0131 tek tek g\u00f6stermedim. CMake dosyalar\u0131na ilgili ba\u015fl\u0131kta bakaca\u011f\u0131z. Ayr\u0131ca tamamen bo\u015f da olmamas\u0131 i\u00e7in, Utility k\u00fct\u00fcphanesini ekledim.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Gitlab<\/span><\/strong><\/h2>\n<p>Evet, ba\u015fta da bahsetti\u011fim gibi bu uygulamay\u0131 Gitlab \u00fczerinde konu\u015fland\u0131rd\u0131m. Sebebini k\u0131saca \u00f6zetlemem gerekirse, \u00fc\u00e7\u00fcnc\u00fc parti bir uygulama (daha \u00f6nce kulland\u0131\u011f\u0131m appveyor ya da jenkins) kullanmadan s\u00fcrekli entegrasyon kabiliyetleri sunmas\u0131 ve a\u00e7\u0131k kaynak olmas\u0131 oldu. Elbette alternatif uygulamalar var ama bence en kolaylar\u0131ndan birisi gitlab. Bu ba\u015fl\u0131k alt\u0131nda di\u011ferlerine de \u00e7ok k\u0131sa bakaca\u011f\u0131z (\u00f6r. appveyor, azure devops, vb.).<\/p>\n<p>Daha \u00f6nce bu tarz yaz\u0131l\u0131mlar kullanmad\u0131ysan\u0131z en \u00e7ok kar\u0131\u015ft\u0131rabilece\u011finiz \u00fc\u00e7 kavram: git, github ve gitlab olacakt\u0131r. Bunlar nedir ve farklar\u0131 ne sorusu ilk sorular olacakt\u0131r. Hemen bakal\u0131m.<\/p>\n<p><strong>Git<\/strong> temelde, SVN, CVS ve IBM ClearCase gibi bir s\u00fcr\u00fcm kontrol sistemidir. \u00dccretsiz bir yaz\u0131l\u0131md\u0131r ve Linux \u00e7ekirde\u011fini yazan Linus Torvalds taraf\u0131ndan tasarlanm\u0131\u015ft\u0131r. Bu tarz s\u00fcr\u00fcm kontrol yaz\u0131l\u0131mlar\u0131n\u0131n en temel ama\u00e7lar\u0131:<\/p>\n<ul>\n<li>Kodlar\u0131n\u0131z ve benzeri kalemlerinizi saklay\u0131p, g\u00fcncelleme ge\u00e7mi\u015fini takip etmenizi sa\u011flamak,<\/li>\n<li>De\u011fi\u015fiklik y\u00f6netimine yard\u0131mc\u0131 olmak,<\/li>\n<li>Birden fazla geli\u015ftiricinin ayn\u0131 kod k\u00fcmesi \u00fczerinde \u00e7al\u0131\u015fmas\u0131na izin vermek.<\/li>\n<\/ul>\n<p>Bu yaz\u0131l\u0131mlar genel olarak merkezi ve da\u011f\u0131t\u0131k olmak \u00fczere ikiye ayr\u0131labilirler. Merkezi olanlarda, veriler temel bir sunucuda tutulur, eri\u015fimler genelde kontroll\u00fc olur ve dallanma i\u015flemleri nispeten zordur. \u00d6r. IBM Clearcase, SVN. Da\u011f\u0131t\u0131k s\u00fcr\u00fcm kontrol sistemlerinde ise, her geli\u015ftirici verilerin bir kopyas\u0131n\u0131 ve ge\u00e7mi\u015f bilgisini tutar (clone). Performans\u0131, merkezi sistemlere g\u00f6re genelde daha iyidir ve dallanma\/birle\u015ftirme i\u015fleri \u00e7ok daah kolayd\u0131r. Merkezi sunucuya s\u00fcrekli ba\u011fl\u0131 olma k\u0131s\u0131t\u0131 yoktur. \u00d6r. Git, mercurial. Kaynaklar k\u0131sm\u0131nda bu iki tipe ili\u015fkin bir ka\u00e7 site ekledim, g\u00f6z atabilirsiniz. Benzer \u015fekilde git ile ilgili de bir \u00e7ok kaynak mevcut.<\/p>\n<p><strong>Github<\/strong> ve <strong>Gitlab<\/strong>&#8216;a gelecek olursak. Asl\u0131nda bu ikisi, internet \u00fczerinden sizlere Git tabanl\u0131 bir depolama servisi sunan uygulamalard\u0131r. Github, hem \u00fccretli (\u00f6zel) hem de \u00fccretsiz servisler sunarken, gitlab ise hem \u00f6zel hem de \u00f6zel olmayan projeler olu\u015fturman\u0131za olanak sa\u011flamaktad\u0131r. Gitlab, bir s\u00fcrece \u00f6nce microsoft taraf\u0131ndan sat\u0131n al\u0131nd\u0131ktan sonra, ilginin gitlab&#8217;a kayd\u0131\u011f\u0131n\u0131 s\u00f6ylemek yanl\u0131\u015f olmaz san\u0131r\u0131m. Ama benim a\u00e7\u0131mdan en \u00f6nemli fark, gitlab&#8217;\u0131n sundu\u011fu s\u00fcrekli entegrasyon (CI) ve s\u00fcrekli teslimat (CD) servisleri.<\/p>\n<p>Bu ikisinin daha detayl\u0131 kar\u015f\u0131la\u015ft\u0131rmalar\u0131 i\u00e7in kaynak k\u0131sm\u0131na ekledi\u011fim sitelere g\u00f6z atabilirsiniz. A\u015fa\u011f\u0131da bu kaynaklardan buldu\u011fum bir kar\u015f\u0131la\u015ft\u0131rma tablosunu g\u00f6rebilirsiniz:<\/p>\n<table class=\"easy-table easy-table-default \">\n<thead>\n<tr>\n<th>\u00d6zellikle<\/th>\n<th align=\"center\">GitLab<\/th>\n<th align=\"center\">GitHub<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Yay\u0131nlanma Tarihi<\/td>\n<td align=\"center\">Eyl\u00fcl 2011<\/td>\n<td align=\"center\">Nisan 2008<\/td>\n<\/tr>\n<tr>\n<td>Kullan\u0131m Y\u00f6ntemleri<\/td>\n<td align=\"center\">Herkese a\u00e7\u0131k ve \u00f6zel projeler i\u00e7in s\u0131n\u0131rs\u0131z ve bedava<\/td>\n<td align=\"center\">Herkese a\u00e7\u0131k projeler i\u00e7in bedava<\/td>\n<\/tr>\n<tr>\n<td>Dahili Devops Deste\u011fi<\/td>\n<td align=\"center\">Var<\/td>\n<td align=\"center\">Yok<\/td>\n<\/tr>\n<tr>\n<td>Kod G\u00f6zden Ge\u00e7irme<\/td>\n<td align=\"center\">Var<\/td>\n<td align=\"center\">Var<\/td>\n<\/tr>\n<tr>\n<td>Wiki<\/td>\n<td align=\"center\">yes<\/td>\n<td align=\"center\">Var<\/td>\n<\/tr>\n<tr>\n<td>Hata &amp; Husus Takibi<\/td>\n<td align=\"center\">Var<\/td>\n<td align=\"center\">Var<\/td>\n<\/tr>\n<tr>\n<td>\u00d6zel Dallanma<\/p>\n<p>Private Branching<\/td>\n<td align=\"center\">Var<\/td>\n<td align=\"center\">Var<\/td>\n<\/tr>\n<tr>\n<td>Olu\u015fturma Sistemi<\/td>\n<td align=\"center\">Var<\/td>\n<td align=\"center\">Var (3. parti servis olarak)<\/td>\n<\/tr>\n<tr>\n<td>Proje \u0130\u00e7eri Alma<\/td>\n<td align=\"center\">Var<\/td>\n<td align=\"center\">Yok<\/td>\n<\/tr>\n<tr>\n<td>Proje D\u0131\u015far\u0131 Aktarma<\/td>\n<td align=\"center\">Var<\/td>\n<td align=\"center\">Yok<\/td>\n<\/tr>\n<tr>\n<td>Zaman Takibi<\/td>\n<td align=\"center\">Var<\/td>\n<td align=\"center\">Yok<\/td>\n<\/tr>\n<tr>\n<td>Web-hosting<\/td>\n<td align=\"center\">Var<\/td>\n<td align=\"center\">Var<\/td>\n<\/tr>\n<tr>\n<td>Self-hosting<\/td>\n<td align=\"center\">Var<\/td>\n<td align=\"center\">Var (kurumsal plan ile)<\/td>\n<\/tr>\n<tr>\n<td>Pop\u00fclerlik<\/td>\n<td align=\"center\">546.000+ Proje<\/td>\n<td align=\"center\">69.000.000+ Proje,<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Elbette bu ba\u015fl\u0131\u011f\u0131 bitirmeden hemen projemizin bulundu\u011fu gitlab adresini vereyim:<\/p>\n<p><strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/gitlab.com\/yazilimperver\/applicationmonitoringtool\">https:\/\/gitlab.com\/yazilimperver\/applicationmonitoringtool<\/a><\/span><\/strong><\/p>\n<h2><strong><span style=\"color: #0000ff;\">CMake<\/span><\/strong><\/h2>\n<p>AMT yaz\u0131l\u0131m\u0131 i\u00e7in sabit bir VS projesi eklemektense, CMake dosyalar\u0131n\u0131 olu\u015fturmaya karar verdim. Bu vesile ile daha \u00f6nceki CMake yaz\u0131lar\u0131mda incelede\u011fim CMake arac\u0131na ili\u015fkin kabiliyetleri, ger\u00e7ek bir uygulamada nas\u0131l kullanabilirize bak\u0131yor olaca\u011f\u0131z. Bu sayede sizlere de, benzer durumlar i\u00e7in yard\u0131mc\u0131 olmay\u0131 umut ediyorum. Bu ba\u011flamda, CMake&#8217;e ili\u015fkin anlatmak istediklerimi sekme sekme sizlere aktarmaya \u00e7al\u0131\u015faca\u011f\u0131m. Burada, CMake betikleri ile ilgili her \u015feyi anlatmayaca\u011f\u0131m.<\/p>\n<p>\u0130lgili kullan\u0131m i\u00e7in elbette gitlab&#8217;daki dosyalar\u0131 da inceleyebilirsiniz. Uygulama geli\u015ftik\u00e7e, CMake dosyalar\u0131m\u0131z da geli\u015fiyor olacak. Bu arada, CMake&#8217;e ili\u015fkin h\u0131zl\u0131 bir hat\u0131rlama i\u00e7in a\u015fa\u011f\u0131daki yaz\u0131lar\u0131ma g\u00f6z atabilirsiniz:<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/08\/28\/merhaba-cmake\/\">Merhaba CMake<\/a><\/strong><\/span><\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/09\/13\/cmake-devam\/\">CMake \u2013 II (devam)<\/a><\/strong><\/span><\/p>\n<p>Evet \u015fimdi gelelim CMake ile ilgili aktaracaklar\u0131ma:<\/p>\n<ul>\n<li>\u00c7oklu CMake dosyalar\u0131n\u0131n, proje dizini ile paralel bir \u015fekilde olu\u015fturulmas\u0131,\n<ul>\n<li>Bu konuya, yukar\u0131daki yaz\u0131lar\u0131mda da de\u011finmi\u015ftim. Tek bir CMakeLists.txt dosyas\u0131 ile b\u00fct\u00fcn projeyi idame etmek olduk\u00e7a zor olabilir.<\/li>\n<li>AMT ba\u011flam\u0131nda ben, a\u015fa\u011f\u0131daki dosyalar\u0131 olu\u015fturdum ve konumland\u0131rd\u0131m:\n<ul>\n<li>\n<p id=\"CDsxXVo\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2042 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1ab3a41112.png\" alt=\"\" width=\"256\" height=\"363\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1ab3a41112.png 324w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1ab3a41112-211x300.png 211w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1ab3a41112-150x213.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1ab3a41112-200x284.png 200w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/p>\n<\/li>\n<li>En tepedeki CMakeLists.txt, ilk CMake olu\u015fturmak i\u00e7in kullanaca\u011f\u0131m\u0131z betik dosyas\u0131 ve di\u011fer betikleri adresler.<\/li>\n<li>Bu betik i\u00e7erisinde <strong>tan\u0131mlanan de\u011fi\u015fkenler<\/strong> ve kapsam ile ilgili hemen bir iki kelam edeyim. CMake betikleri aras\u0131nda, kapsam anlam\u0131nda alt a\u011fa\u00e7 konumlar\u0131nda bulunan betikler, \u00fcst taraftan gelen kapsam\u0131 al\u0131rlar (\u00f6r. yukar\u0131da tan\u0131mlanan bir de\u011fi\u015fken alt betiklerde de kullan\u0131labilir). Varsay\u0131lan davran\u0131\u015f olarak da, alt seviyede yap\u0131lan de\u011fi\u015fiklikler \u00fcst seviyeyi etkilemez. Elbette bunu da yapmak isteyebilirsiniz. Bu ama\u00e7la da <strong>PARENT_SCOPE<\/strong> kullanabilirsiniz. \u00d6rne\u011fin, en tepede FOO diye bir de\u011fi\u015fken tan\u0131mland\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnelim, alt seviye CMake beti\u011fi i\u00e7erisinde &#8220;<strong>set(FOO ilgiliDe\u011fer PARENT_SCOPE)<\/strong>&#8221; derseniz, tepedeki de\u011fi\u015fkeni de g\u00fcncellemi\u015f olursunuz. Elbette bu tarz ba\u011f\u0131ml\u0131l\u0131klar\u0131 \u00e7ok kullanmamakta fayda var.<\/li>\n<li>root\/ext i\u00e7erisindeki CMake beti\u011fi, 3. parti k\u00fct\u00fcphaneleri eklemek i\u00e7in kullanaca\u011f\u0131z,<\/li>\n<li>root\/src i\u00e7erisindeki CMake betikleri, kaynak kodlar\u0131 i\u00e7in proje dosyalar\u0131 olu\u015fturmak i\u00e7in,<\/li>\n<li>root\/test i\u00e7erisindeki CMake betikleri, test kodlar\u0131 i\u00e7in proje dosyalar\u0131 olu\u015fturmak i\u00e7in kullanaca\u011f\u0131z.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>CMake kullanarak, bir dosyan\u0131n konfig\u00fcre edilmesi olay\u0131. Bizim durumumuzda, yaz\u0131l\u0131m\u0131n s\u00fcr\u00fcm bilgilerini i\u00e7eren bir dosyan\u0131n olu\u015fturulmas\u0131.\n<ul>\n<li>Bu ama\u00e7la <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/cmake.org\/cmake\/help\/latest\/command\/configure_file.html\">Configure_File<\/a> <\/strong><\/span>komutunu kullan\u0131yoruz,<\/li>\n<li>\u0130lk parametresi (&#8220;<strong>config.h.in<\/strong>&#8220;), \u015fablon bir dosyay\u0131 temsil eder. Bu dosya i\u00e7ersine konulan &#8216;<strong>${CMAKE_VARIABLE}<\/strong>&#8216;, &#8216;<strong>@CMAKE_VARIABLE@<\/strong>&#8216; ifadeleri, CMake beti\u011fi i\u00e7erisindeki de\u011fi\u015fkenlerin de\u011ferleri ile de\u011fi\u015ftirilip, ikinci parametrede g\u00f6sterilen dosya olu\u015fturulur (include\/config.h).<\/li>\n<\/ul>\n<\/li>\n<li>CMake betiklerinde kullanabilece\u011finiz \u00f6n tan\u0131ml\u0131 bir tak\u0131m de\u011fi\u015fkenler vard\u0131r. Burada bunlardan birisini kullan\u0131yoruz. O da &#8220;<strong>ApplicationMonitorTool_SOURCE_DIR<\/strong>&#8221; de\u011fi\u015fkeni. Bu de\u011fi\u015fken, isimlendirilen projenin kaynak dizinini tutar.\n<ul>\n<li>Benzeri de\u011fi\u015fkenler i\u00e7in <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/cmake.org\/cmake\/help\/latest\/manual\/cmake-variables.7.html\">https:\/\/cmake.org\/cmake\/help\/latest\/manual\/cmake-variables.7.html<\/a> <\/span><\/strong>adresine g\u00f6z atabilirsiniz.<\/li>\n<\/ul>\n<\/li>\n<li>Bir di\u011fer kulland\u0131\u011f\u0131m kabiliyet de &#8220;<strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/cmake.org\/cmake\/help\/v3.0\/prop_gbl\/USE_FOLDERS.html\">USE_FOLDERS<\/a><\/span><\/strong>&#8220;. Bu, size CMake &#8220;target&#8221;&#8216;lar\u0131n\u0131 (.exe, k\u00fct\u00fcphane), dizinler arac\u0131l\u0131\u011f\u0131 ile organize etmek i\u00e7in kullanabilece\u011finiz bir kabiliyet. Visual Studio kullan\u0131m\u0131nda, olu\u015fturulan solution i\u00e7erisinde &#8220;Soluiton Folder&#8221;\/\u00e7\u00f6z\u00fcm dizinleri olu\u015fturmak i\u00e7in de bu kabiliyeti kullanabilirsiniz. Ben bunu\u00fc, 3. parti k\u00fct\u00fcphaneleri, kaynak kod projeleri ve test projelerini grupland\u0131rmak i\u00e7in kullanaca\u011f\u0131m. Gelelim bunu nas\u0131l kullanaca\u011f\u0131z:\n<ul>\n<li>\u00d6ncelikle, &#8220;set_property<strong>(GLOBAL PROPERTY USE_FOLDERS ON)<\/strong>&#8221; ile bu kabiliyeti aktifle\u015ftirmeniz gerekiyor,<\/li>\n<li>Sonras\u0131nda kullan\u0131m i\u00e7in, ilgili target&#8217;\u0131 nereye ekleyece\u011finizi s\u00f6ylemek i\u00e7in de \u00f6rne\u011fin &#8220;root\/src\/utility&#8221; i\u00e7erisindeki betikte, VS i\u00e7erisinde &#8220;Src\/Utility&#8221; \u00e7\u00f6z\u00fcm dizini olu\u015fturmak i\u00e7in &#8220;<strong>set_target_properties(Utility PROPERTIES FOLDER Src)&#8221;<\/strong> kullan\u0131labilir. \u00d6rne\u011fin a\u015fa\u011f\u0131da, bu yetenek kullan\u0131larak olu\u015fturulan &#8220;Ext, Src, Test&#8221; dizinleri buna \u00f6rnektir.<\/li>\n<li><img loading=\"lazy\" decoding=\"async\" width=\"180\" height=\"157\" class=\"alignnone size-full wp-image-2045 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1bb40cea90.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1bb40cea90.png 180w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1bb40cea90-150x131.png 150w\" sizes=\"auto, (max-width: 180px) 100vw, 180px\" \/><\/li>\n<li>Buradaki betiklerin yans\u0131mas\u0131n\u0131, Gitlab&#8217;tan projenin kaynak dosylar\u0131n\u0131 indirip, VS dosyalar\u0131n\u0131 olu\u015fturursan\u0131z bunu daha net g\u00f6rebilirsiniz.<\/li>\n<\/ul>\n<\/li>\n<li>Yukar\u0131daki y\u00f6ntemin yan\u0131nda, Visual studio i\u00e7erisindeki &#8220;Filtre&#8221;&#8216;leri nas\u0131l olu\u015fturabiliriz ona bakal\u0131m. Yine, &#8220;root\/src\/utility&#8221; i\u00e7erisindeki beti\u011fe bakal\u0131m. Burada &#8220;<strong>source_group(&#8220;Header Files&#8221; FILES ${HEADER_FILES})<\/strong>&#8221; ile bu filtrelerden birini olu\u015fturuyoruz. Benzer \u015fekilde &#8220;Source Files&#8221; i\u00e7in de olu\u015fturdu\u011fumuzda VS i\u00e7erisindeki g\u00f6r\u00fcn\u00fcm \u015fu \u015fekilde oluyor:\n<ul>\n<li><img loading=\"lazy\" decoding=\"async\" width=\"306\" height=\"352\" class=\"alignnone size-full wp-image-2046 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1cba6a08b5.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1cba6a08b5.png 306w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1cba6a08b5-261x300.png 261w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1cba6a08b5-150x173.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1cba6a08b5-200x230.png 200w\" sizes=\"auto, (max-width: 306px) 100vw, 306px\" \/><\/li>\n<\/ul>\n<\/li>\n<li>Bir di\u011fer yeni kullan\u0131m da, ba\u015fl\u0131k dosyas\u0131 dizinlerinin eklenmesi yakla\u015f\u0131m\u0131 olacakt\u0131r. \u00d6nceki yaz\u0131mda bunu &#8220;<strong>include_directories<\/strong>&#8221; dizini ile yapm\u0131\u015ft\u0131m ama daha sonra okudu\u011fum kaynaklarda art\u0131k bu kullan\u0131m\u0131n tercih edilmedi\u011fi ve sak\u0131ncalar\u0131 oldu\u011funu g\u00f6rd\u00fcm. Bunun yerine \u00f6nerilen y\u00f6ntem &#8220;<strong>target_include_directories<\/strong>&#8221; fonksiyonudur. Fark\u0131 nedir?\n<ul>\n<li>include_directories, fonksiyonu kullan\u0131ld\u0131\u011f\u0131nda, ilgili ba\u015fl\u0131k dizini b\u00fct\u00fcn projeler ve hedeflere (target) eklenir ve alt dizinlerdeki betiklere de sirayet eder. Ama target_include_directories, sadece ilgili proje\/hedefe (target) i\u00e7in bu ba\u015fl\u0131k dizinlerini ekler. Bu fark \u00e7ok \u00f6nemli, \u00e7\u00fcnk\u00fc ilki daha kontrols\u00fcz bir kullan\u0131md\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li>En tepe isimdeki CMake beti\u011fi i\u00e7erisindeki <strong>enable_testing<\/strong> komutu ile ilgili dizin ve alt dizinlerde test dosyalar\u0131 dahil edilir.\n<ul>\n<li>Buna bir sonraki yaz\u0131mda tekrar d\u00f6nece\u011fim onun i\u00e7in burada b\u0131rak\u0131yorum.<\/li>\n<\/ul>\n<\/li>\n<li>En son bahsedece\u011fim husus da, GoogleTest&#8217;in CMake dahil edilmesi.\u00a0 Asl\u0131nda bu benzeri k\u00fct\u00fcphaneler i\u00e7in de referans olabilir.\n<ul>\n<li>Normalde, bu tarz k\u00fct\u00fcphaneleri indirip, ba\u015fl\u0131k ve .lib dosyalar\u0131n\u0131, proje dizini i\u00e7erisinde bar\u0131nd\u0131r\u0131rd\u0131k ama bu sefer bunu CMake ile nas\u0131l yapabiliriz biraz ona da bakt\u0131m.<\/li>\n<li>Baz\u0131 y\u00f6ntemler internetten indirip kurulmas\u0131na dayan\u0131yor ama bu y\u00f6ntem her platform i\u00e7in uygun olmayabiliyor. Sonu\u00e7 olarak, VS ve benzeri ara\u00e7lar arac\u0131l\u0131\u011f\u0131 ile de kullan\u0131labilmesi i\u00e7in, en g\u00fczel y\u00f6ntem bu k\u00fct\u00fcphaneyi indirip, dizine konulmas\u0131 y\u00f6ntemidir. GoogleTest de CMake beti\u011fi i\u00e7erdi\u011fi i\u00e7in ona at\u0131fta bulunmak yeterli oluyor,<\/li>\n<li>Burada dikkat edilmesi gereken iki husus var. Birincisi, dizine bu \u015fekilde ekledi\u011fimiz i\u00e7in, kurulum ad\u0131m\u0131n\u0131 atlatmak. Bunu &#8220;<strong>set(INSTALL_GTEST OFF)<\/strong>&#8221; ile yap\u0131yoruz. Bir di\u011fer s\u0131k\u0131nt\u0131 ise, \u00f6zellikle VS ile kullan\u0131mda ortaya \u00e7\u0131kan \u00e7al\u0131\u015fma zaman\u0131 k\u00fct\u00fcphane uyumsuzluklar\u0131. Bunu da \u00f6nlemek i\u00e7in <strong>&#8220;set(gtest_force_shared_crt ON CACHE BOOL &#8220;&#8221; FORCE)&#8221;<\/strong> i ekliyoruz,<\/li>\n<li>Peki google testi nas\u0131l ekliyoruz. \u00c7ok basit, sadece &#8220;<strong>add_subdirectory(googletest-master)&#8221;<\/strong> diyerek ekliyoruz.<\/li>\n<li>GoogleTest k\u00fct\u00fcphanesini ba\u011flamak i\u00e7in de, <strong>&#8220;target_link_libraries(Utility_Test gtest gmock Utility)&#8221;<\/strong> diyerek ba\u011fl\u0131yoruz.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>CMake de, olduk\u00e7a b\u00fcy\u00fcyen geli\u015fen bir uygulama, bu konuda kendini geli\u015ftirmek isteyenlere<span style=\"color: #008000;\"><strong> <a style=\"color: #008000;\" href=\"https:\/\/cliutils.gitlab.io\/modern-cmake\/\">https:\/\/cliutils.gitlab.io\/modern-cmake\/<\/a> <\/strong><\/span>adresindeki notlara bakmas\u0131n\u0131 tavsiye ediyorum.<\/p>\n<p>Evet arkada\u015flar, giri\u015f yaz\u0131mdan sonra ilk AMT yaz\u0131m\u0131z\u0131n sonuna geldik. Umar\u0131m ho\u015funuza gitmi\u015ftir. Biraz bekledi\u011fimden uzun oldu ama faydal\u0131 olaca\u011f\u0131n\u0131 inand\u0131\u011f\u0131m konular\u0131 \u00e7\u0131karmaya da elim gitmedi \ud83d\ude42<\/p>\n<p>Bir sonraki yaz\u0131mda, asl\u0131nda mevcut adresde olan kodlardan Utility k\u00fct\u00fcphanesine ve birim test kabiliyetlerine bir g\u00f6z at\u0131yor olaca\u011f\u0131z. O zamana kadar kendinize iyi bak\u0131n ve sa\u011fl\u0131kla kal\u0131n.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Kaynaklar<\/span><\/strong><\/h2>\n<ul>\n<li><a href=\"https:\/\/medium.com\/faun\/centralized-vs-distributed-version-control-systems-a135091299f0\"><span style=\"color: #008000;\"><strong>https:\/\/medium.com\/faun\/centralized-vs-distributed-version-control-systems-a135091299f0<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/ceaksan.com\/tr\/git-platformlari\"><span style=\"color: #008000;\"><strong>https:\/\/ceaksan.com\/tr\/git-platformlari<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.wikiwand.com\/en\/List_of_version-control_software\"><span style=\"color: #008000;\"><strong>https:\/\/www.wikiwand.com\/en\/List_of_version-control_software<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/usersnap.com\/blog\/gitlab-github\/\"><span style=\"color: #008000;\"><strong>https:\/\/usersnap.com\/blog\/gitlab-github\/<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.perforce.com\/blog\/vcs\/how-choose-right-git-powered-wiki-your-team\"><span style=\"color: #008000;\"><strong>https:\/\/www.perforce.com\/blog\/vcs\/how-choose-right-git-powered-wiki-your-team<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/cmake.org\/cmake\/help\/latest\/manual\/cmake-variables.7.html\"><span style=\"color: #008000;\"><strong>https:\/\/cmake.org\/cmake\/help\/latest\/manual\/cmake-variables.7.html<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/cliutils.gitlab.io\/modern-cmake\/\"><span style=\"color: #008000;\"><strong>https:\/\/cliutils.gitlab.io\/modern-cmake\/<\/strong><\/span><\/a><\/li>\n<\/ul>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Yaz\u0131 dizisinin di\u011fer yaz\u0131lar\u0131: Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 &#8211; Ba\u015flang\u0131\u00e7 Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 3 &#8211; Utility, Birim Testler, S\u00fcrekli Entegrasyon Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 4 &#8211; Qt Ayarlamalar\u0131 Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 5 &#8211; AMT v1.0 Evet dostlar, Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 (Application Monitor Tool, AMT) i\u00e7in art\u0131k demir alma vakti geldi, ba\u015flang\u0131\u00e7 haz\u0131rl\u0131klar\u0131 tamamland\u0131&#8230;. <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,41],"tags":[832,820,155,828,830,86,51,829,834,831,833,58],"class_list":["post-2027","post","type-post","status-publish","format-standard","hentry","category-c","category-modern-c","tag-birim","tag-ci","tag-cmake","tag-enable_testing","tag-folder-structure","tag-git","tag-github","tag-gitlab","tag-solution-folder","tag-surekli-entegrasyon","tag-surum-kontrol-sistemi","tag-visual-studio"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 - Ba\u015flang\u0131\u00e7 - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 - Ba\u015flang\u0131\u00e7 - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Yaz\u0131 dizisinin di\u011fer yaz\u0131lar\u0131: Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 &#8211; Ba\u015flang\u0131\u00e7 Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 3 &#8211; Utility, Birim Testler, S\u00fcrekli Entegrasyon Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 4 &#8211; Qt Ayarlamalar\u0131 Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 5 &#8211; AMT v1.0 Evet dostlar, Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 (Application Monitor Tool, AMT) i\u00e7in art\u0131k demir alma vakti geldi, ba\u015flang\u0131\u00e7 haz\u0131rl\u0131klar\u0131 tamamland\u0131.... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-03T14:35:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-11-03T21:31:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1ab3a41112.png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"26 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 &#8211; Ba\u015flang\u0131\u00e7\",\"datePublished\":\"2021-01-03T14:35:51+00:00\",\"dateModified\":\"2021-11-03T21:31:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/\"},\"wordCount\":5043,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"birim\",\"CI\",\"CMAKE\",\"enable_testing\",\"folder structure\",\"Git\",\"Github\",\"gitlab\",\"solution folder\",\"s\u00fcrekli entegrasyon\",\"s\u00fcr\u00fcm kontrol sistemi\",\"Visual Studio\"],\"articleSection\":[\"C++\",\"Modern C++\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/\",\"name\":\"Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 - Ba\u015flang\u0131\u00e7 - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2021-01-03T14:35:51+00:00\",\"dateModified\":\"2021-11-03T21:31:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 &#8211; Ba\u015flang\u0131\u00e7\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 - Ba\u015flang\u0131\u00e7 - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/","og_locale":"tr_TR","og_type":"article","og_title":"Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 - Ba\u015flang\u0131\u00e7 - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Yaz\u0131 dizisinin di\u011fer yaz\u0131lar\u0131: Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 &#8211; Ba\u015flang\u0131\u00e7 Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 3 &#8211; Utility, Birim Testler, S\u00fcrekli Entegrasyon Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 4 &#8211; Qt Ayarlamalar\u0131 Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 5 &#8211; AMT v1.0 Evet dostlar, Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 (Application Monitor Tool, AMT) i\u00e7in art\u0131k demir alma vakti geldi, ba\u015flang\u0131\u00e7 haz\u0131rl\u0131klar\u0131 tamamland\u0131.... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2021-01-03T14:35:51+00:00","article_modified_time":"2021-11-03T21:31:00+00:00","og_image":[{"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/01\/img_5ff1ab3a41112.png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"26 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 &#8211; Ba\u015flang\u0131\u00e7","datePublished":"2021-01-03T14:35:51+00:00","dateModified":"2021-11-03T21:31:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/"},"wordCount":5043,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["birim","CI","CMAKE","enable_testing","folder structure","Git","Github","gitlab","solution folder","s\u00fcrekli entegrasyon","s\u00fcr\u00fcm kontrol sistemi","Visual Studio"],"articleSection":["C++","Modern C++"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/","name":"Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 - Ba\u015flang\u0131\u00e7 - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2021-01-03T14:35:51+00:00","dateModified":"2021-11-03T21:31:00+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/03\/uygulama-izleme-yazilimi-2-baslangic\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 2 &#8211; Ba\u015flang\u0131\u00e7"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=2027"}],"version-history":[{"count":19,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2027\/revisions"}],"predecessor-version":[{"id":2337,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2027\/revisions\/2337"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}