<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ro">
	<id>http://wiki.dcae.pub.ro/index.php?action=history&amp;feed=atom&amp;title=SDPT_Lab_3</id>
	<title>SDPT Lab 3 - Revizia istoricului</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.dcae.pub.ro/index.php?action=history&amp;feed=atom&amp;title=SDPT_Lab_3"/>
	<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=SDPT_Lab_3&amp;action=history"/>
	<updated>2026-05-06T03:57:44Z</updated>
	<subtitle>Istoricul versiunilor pentru această pagină din wiki</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>http://wiki.dcae.pub.ro/index.php?title=SDPT_Lab_3&amp;diff=8292&amp;oldid=prev</id>
		<title>Rhobincu la 16 martie 2026 17:07</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=SDPT_Lab_3&amp;diff=8292&amp;oldid=prev"/>
		<updated>2026-03-16T17:07:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ro&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Versiunea anterioară&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versiunea de la data 16 martie 2026 17:07&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l183&quot; &gt;Linia 183:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 183:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lab Evaluation ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lab Evaluation ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To receive full credit, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;call &lt;/del&gt;the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;professor/TA to your workstation and demonstrate&lt;/del&gt;:&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To receive full credit, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;submit &lt;/ins&gt;the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;following elements on Moodle&lt;/ins&gt;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The GCC dependency tracking working in Challenge 1 (changing a header triggers a recompile)&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Final version of the Makefile&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The clean root directory, proving an Out-&lt;/del&gt;of&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;-Source build.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Final version &lt;/ins&gt;of &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;the CMakeLists&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;txt&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;# The &amp;lt;code&amp;gt;libsensor_driver&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;a&amp;lt;/code&amp;gt; static library file inside your build directory&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Screenshot of the &lt;/ins&gt;console output of your executable printing the JSON payload.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The &lt;/del&gt;console output of your executable printing the JSON payload.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rhobincu</name></author>
	</entry>
	<entry>
		<id>http://wiki.dcae.pub.ro/index.php?title=SDPT_Lab_3&amp;diff=8291&amp;oldid=prev</id>
		<title>Rhobincu la 15 martie 2026 22:46</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=SDPT_Lab_3&amp;diff=8291&amp;oldid=prev"/>
		<updated>2026-03-15T22:46:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ro&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Versiunea anterioară&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versiunea de la data 15 martie 2026 22:46&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l11&quot; &gt;Linia 11:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 11:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Master Modern CMake: out-of-source builds, targets, and static libraries.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Master Modern CMake: out-of-source builds, targets, and static libraries.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Integrate remote third-party libraries using CMake &amp;lt;code&amp;gt;FetchContent&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Integrate remote third-party libraries using CMake &amp;lt;code&amp;gt;FetchContent&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;---&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Part 1: Theoretical Reference ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Part 1: Theoretical Reference ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l87&quot; &gt;Linia 87:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 85:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://www.gnu.org/software/make/manual/make.html GNU Make Manual]&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://www.gnu.org/software/make/manual/make.html GNU Make Manual]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://cmake.org/cmake/help/latest/ CMake Official Documentation]&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://cmake.org/cmake/help/latest/ CMake Official Documentation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;---&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Part 2: The Challenges ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Part 2: The Challenges ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l138&quot; &gt;Linia 138:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 134:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;---&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Challenge 1: The Scalable Makefile (Estimated time: 25 mins) ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Challenge 1: The Scalable Makefile (Estimated time: 25 mins) ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l152&quot; &gt;Linia 152:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 147:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Open &amp;lt;code&amp;gt;include/sensor.h&amp;lt;/code&amp;gt; and add a dummy integer to the &amp;lt;code&amp;gt;SensorData&amp;lt;/code&amp;gt; struct. Run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; again. It MUST recompile both &amp;lt;code&amp;gt;.cpp&amp;lt;/code&amp;gt; files automatically. If it doesn&amp;#039;t, your dependency tracking is broken.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Open &amp;lt;code&amp;gt;include/sensor.h&amp;lt;/code&amp;gt; and add a dummy integer to the &amp;lt;code&amp;gt;SensorData&amp;lt;/code&amp;gt; struct. Run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; again. It MUST recompile both &amp;lt;code&amp;gt;.cpp&amp;lt;/code&amp;gt; files automatically. If it doesn&amp;#039;t, your dependency tracking is broken.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;---&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Challenge 2: Migrating to CMake (Estimated time: 20 mins) ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Challenge 2: Migrating to CMake (Estimated time: 20 mins) ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l164&quot; &gt;Linia 164:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 158:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Verification:&amp;#039;&amp;#039;&amp;#039;  &lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Verification:&amp;#039;&amp;#039;&amp;#039;  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Your root directory should contain only your source files and the &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;. Inside the &amp;lt;code&amp;gt;build/&amp;lt;/code&amp;gt; directory, running &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; should yield the executable.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Your root directory should contain only your source files and the &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;. Inside the &amp;lt;code&amp;gt;build/&amp;lt;/code&amp;gt; directory, running &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; should yield the executable.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;---&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Challenge 3: Modular Architecture (Estimated time: 25 mins) ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Challenge 3: Modular Architecture (Estimated time: 25 mins) ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l177&quot; &gt;Linia 177:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 169:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Verification:&amp;#039;&amp;#039;&amp;#039;  &lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Verification:&amp;#039;&amp;#039;&amp;#039;  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; inside the build folder. You must see it compile &amp;lt;code&amp;gt;libsensor_driver.a&amp;lt;/code&amp;gt; first, and then link it to the main executable.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; inside the build folder. You must see it compile &amp;lt;code&amp;gt;libsensor_driver.a&amp;lt;/code&amp;gt; first, and then link it to the main executable.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;---&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Challenge 4: Third-Party Git Dependencies (Estimated time: 30 mins) ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Challenge 4: Third-Party Git Dependencies (Estimated time: 30 mins) ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l191&quot; &gt;Linia 191:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 181:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Verification:&amp;#039;&amp;#039;&amp;#039;  &lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Verification:&amp;#039;&amp;#039;&amp;#039;  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Running your executable should print a perfectly formatted, multi-line JSON string representing your sensor data. Check &amp;lt;code&amp;gt;build/_deps/&amp;lt;/code&amp;gt; to see the downloaded source code.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Running your executable should print a perfectly formatted, multi-line JSON string representing your sensor data. Check &amp;lt;code&amp;gt;build/_deps/&amp;lt;/code&amp;gt; to see the downloaded source code.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;---&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lab Evaluation ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lab Evaluation ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rhobincu</name></author>
	</entry>
	<entry>
		<id>http://wiki.dcae.pub.ro/index.php?title=SDPT_Lab_3&amp;diff=8290&amp;oldid=prev</id>
		<title>Rhobincu la 15 martie 2026 22:43</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=SDPT_Lab_3&amp;diff=8290&amp;oldid=prev"/>
		<updated>2026-03-15T22:43:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.dcae.pub.ro/index.php?title=SDPT_Lab_3&amp;amp;diff=8290&amp;amp;oldid=8289&quot;&gt;Afișare diferențe&lt;/a&gt;</summary>
		<author><name>Rhobincu</name></author>
	</entry>
	<entry>
		<id>http://wiki.dcae.pub.ro/index.php?title=SDPT_Lab_3&amp;diff=8289&amp;oldid=prev</id>
		<title>Rhobincu: Pagină nouă: = Lab 3: Build Systems - From GNU Make to Modern CMake =  == Introduction == In Week 2, we solved the human collaboration problem using Git. Today, we solve the compilation scaling...</title>
		<link rel="alternate" type="text/html" href="http://wiki.dcae.pub.ro/index.php?title=SDPT_Lab_3&amp;diff=8289&amp;oldid=prev"/>
		<updated>2026-03-15T22:37:31Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: = Lab 3: Build Systems - From GNU Make to Modern CMake =  == Introduction == In Week 2, we solved the human collaboration problem using Git. Today, we solve the compilation scaling...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pagină nouă&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Lab 3: Build Systems - From GNU Make to Modern CMake =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
In Week 2, we solved the human collaboration problem using Git. Today, we solve the compilation scaling problem. &lt;br /&gt;
&lt;br /&gt;
As embedded projects grow from a single file to hundreds of files with external dependencies (like cryptography or networking libraries), clicking a &amp;quot;Build&amp;quot; button in an IDE or typing &amp;lt;code&amp;gt;g++ main.cpp&amp;lt;/code&amp;gt; in the terminal is no longer viable. By the end of this 2-hour lab, you will have:&lt;br /&gt;
# Written a scalable GNU Makefile using pattern rules and automatic variables.&lt;br /&gt;
# Solved the &amp;quot;Header Dependency Problem&amp;quot; using GCC&amp;#039;s &amp;lt;code&amp;gt;-MMD&amp;lt;/code&amp;gt; flags.&lt;br /&gt;
# Migrated the project to Modern CMake.&lt;br /&gt;
# Enforced clean &amp;quot;Out-of-Source&amp;quot; builds.&lt;br /&gt;
# Built a static hardware driver library and linked it to an executable.&lt;br /&gt;
# Automatically downloaded and linked a 3rd-party library directly from GitHub using CMake&amp;#039;s &amp;lt;code&amp;gt;FetchContent&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Requirement:&amp;#039;&amp;#039;&amp;#039; You may work individually or with your partner from last week.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Part 1: Project Setup and The GNU Make Baseline (30 Minutes) ==&lt;br /&gt;
First, we need some source code to compile. We will simulate an IoT sensor node.&lt;br /&gt;
&lt;br /&gt;
=== 1. Create the Project Workspace ===&lt;br /&gt;
Open your terminal and create a new directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir sdpt-lab3-builds&lt;br /&gt;
cd sdpt-lab3-builds&lt;br /&gt;
mkdir src include&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Create the Source Files ===&lt;br /&gt;
Create a header file &amp;lt;code&amp;gt;include/sensor.h&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef SENSOR_H&lt;br /&gt;
#define SENSOR_H&lt;br /&gt;
&lt;br /&gt;
struct SensorData {&lt;br /&gt;
    int temperature;&lt;br /&gt;
    int humidity;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void init_sensor();&lt;br /&gt;
SensorData read_sensor();&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the implementation file &amp;lt;code&amp;gt;src/sensor.cpp&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/sensor.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void init_sensor() {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;[Hardware] I2C Sensor Initialized.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SensorData read_sensor() {&lt;br /&gt;
    SensorData data;&lt;br /&gt;
    data.temperature = 24;&lt;br /&gt;
    data.humidity = 60;&lt;br /&gt;
    return data;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the main application &amp;lt;code&amp;gt;src/main.cpp&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/sensor.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Starting IoT Node...&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    init_sensor();&lt;br /&gt;
    &lt;br /&gt;
    SensorData current_data = read_sensor();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Temp: &amp;quot; &amp;lt;&amp;lt; current_data.temperature &amp;lt;&amp;lt; &amp;quot;C, Hum: &amp;quot; &amp;lt;&amp;lt; current_data.humidity &amp;lt;&amp;lt; &amp;quot;%&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Write the Scalable Makefile ===&lt;br /&gt;
In the root directory (&amp;lt;code&amp;gt;sdpt-lab3-builds/&amp;lt;/code&amp;gt;), create a file named exactly &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;#039;&amp;#039;Warning: You MUST use an actual TAB character for the indented lines, not spaces!&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CXX = g++&lt;br /&gt;
CXXFLAGS = -Wall -Wextra -O2 -MMD -MP&lt;br /&gt;
TARGET = firmware.bin&lt;br /&gt;
&lt;br /&gt;
# Dynamically find all .cpp files in the src/ directory&lt;br /&gt;
SRCS = $(wildcard src/*.cpp)&lt;br /&gt;
&lt;br /&gt;
# String substitution: convert .cpp list to .o list&lt;br /&gt;
OBJS = $(SRCS:.cpp=.o)&lt;br /&gt;
&lt;br /&gt;
# Create a list of .d (dependency) files&lt;br /&gt;
DEPS = $(OBJS:.o=.d)&lt;br /&gt;
&lt;br /&gt;
# Default rule&lt;br /&gt;
all: $(TARGET)&lt;br /&gt;
&lt;br /&gt;
# Linker rule using automatic variables ($^ = all dependencies, $@ = target)&lt;br /&gt;
$(TARGET): $(OBJS)&lt;br /&gt;
	$(CXX) $^ -o $@&lt;br /&gt;
&lt;br /&gt;
# Pattern rule to compile any .cpp into a .o file ($&amp;lt; = first dependency)&lt;br /&gt;
%.o: %.cpp&lt;br /&gt;
	$(CXX) $(CXXFLAGS) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
# Clean rule to remove binaries&lt;br /&gt;
clean:&lt;br /&gt;
	rm -f $(OBJS) $(DEPS) $(TARGET)&lt;br /&gt;
&lt;br /&gt;
# Include the auto-generated GCC dependencies&lt;br /&gt;
-include $(DEPS)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. Test and Inspect the Build ===&lt;br /&gt;
Run the build:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make&lt;br /&gt;
./firmware.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, look inside your &amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt; folder. Run &amp;lt;code&amp;gt;ls src/&amp;lt;/code&amp;gt;. &lt;br /&gt;
Notice the &amp;lt;code&amp;gt;.d&amp;lt;/code&amp;gt; files? Open &amp;lt;code&amp;gt;src/main.d&amp;lt;/code&amp;gt; in a text editor. You will see that GCC automatically wrote a Makefile rule proving that &amp;lt;code&amp;gt;main.o&amp;lt;/code&amp;gt; depends on &amp;lt;code&amp;gt;sensor.h&amp;lt;/code&amp;gt;. This is how Make knows to recompile &amp;lt;code&amp;gt;main.cpp&amp;lt;/code&amp;gt; if you only change the header file!&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Part 2: Migrating to Modern CMake (30 Minutes) ==&lt;br /&gt;
Makefiles are great, but they leave &amp;lt;code&amp;gt;.o&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.d&amp;lt;/code&amp;gt; files scattered all over our source code, and they are not cross-platform. Let&amp;#039;s upgrade.&lt;br /&gt;
&lt;br /&gt;
=== 1. Clean up the Make artifacts ===&lt;br /&gt;
Run the clean rule to delete all the generated binaries from Part 1.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make clean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Write the CMakeLists.txt ===&lt;br /&gt;
In the root directory, create a file named &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.10)&lt;br /&gt;
project(IoTNode CXX)&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_CXX_STANDARD 14)&lt;br /&gt;
set(CMAKE_CXX_STANDARD_REQUIRED ON)&lt;br /&gt;
&lt;br /&gt;
# Define the executable and its source files&lt;br /&gt;
add_executable(firmware src/main.cpp src/sensor.cpp)&lt;br /&gt;
&lt;br /&gt;
# Tell CMake where to look for header files&lt;br /&gt;
target_include_directories(firmware PRIVATE include/)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. The Out-of-Source Build ===&lt;br /&gt;
We will never compile in the root directory again. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
&lt;br /&gt;
# Tell CMake to read the parent directory and generate the build system&lt;br /&gt;
cmake ..&lt;br /&gt;
&lt;br /&gt;
# Execute the build&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Run your program: &amp;lt;code&amp;gt;./firmware&amp;lt;/code&amp;gt;. Notice that your &amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt; directory is completely clean. All binaries are safely isolated inside the &amp;lt;code&amp;gt;build/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Part 3: Modular Architecture (Static Libraries) (30 Minutes) ==&lt;br /&gt;
In professional embedded development, we don&amp;#039;t dump all source files into the executable. We build independent, reusable Static Libraries (&amp;lt;code&amp;gt;.a&amp;lt;/code&amp;gt; files) for hardware drivers.&lt;br /&gt;
&lt;br /&gt;
=== 1. Refactor CMakeLists.txt ===&lt;br /&gt;
Go back to your root directory and open &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt;. Rewrite it to decouple the sensor driver from the main application:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.10)&lt;br /&gt;
project(IoTNode CXX)&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_CXX_STANDARD 14)&lt;br /&gt;
&lt;br /&gt;
# 1. Build the sensor driver as a STATIC library&lt;br /&gt;
add_library(sensor_lib STATIC src/sensor.cpp)&lt;br /&gt;
&lt;br /&gt;
# 2. Attach the include directory to the library (PUBLIC means anyone who links this library gets the headers too)&lt;br /&gt;
target_include_directories(sensor_lib PUBLIC include/)&lt;br /&gt;
&lt;br /&gt;
# 3. Build the main executable (Notice we removed sensor.cpp!)&lt;br /&gt;
add_executable(firmware src/main.cpp)&lt;br /&gt;
&lt;br /&gt;
# 4. Link the library to the executable&lt;br /&gt;
target_link_libraries(firmware PRIVATE sensor_lib)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Rebuild and Verify ===&lt;br /&gt;
Go into your &amp;lt;code&amp;gt;build/&amp;lt;/code&amp;gt; directory and just run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; (CMake automatically detects the changes to CMakeLists.txt and regenerates everything).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Look at the terminal output. You should see it building &amp;lt;code&amp;gt;libsensor_lib.a&amp;lt;/code&amp;gt; first, and then linking it to &amp;lt;code&amp;gt;firmware&amp;lt;/code&amp;gt;. Run &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt; to verify the &amp;lt;code&amp;gt;.a&amp;lt;/code&amp;gt; archive exists.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Part 4: Remote 3rd-Party Dependencies (30 Minutes) ==&lt;br /&gt;
Our IoT node generates data, but we need to format it as JSON to send it over the network. Writing a JSON parser in C++ from scratch is a terrible idea. We will use a popular 3rd-party library (Nlohmann JSON) and import it directly from GitHub using CMake&amp;#039;s &amp;lt;code&amp;gt;FetchContent&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 1. Fetching the Library ===&lt;br /&gt;
Open your &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt; and add the FetchContent block &amp;#039;&amp;#039;before&amp;#039;&amp;#039; your executable definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.14) # Note: Upgraded to 3.14 for FetchContent&lt;br /&gt;
project(IoTNode CXX)&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_CXX_STANDARD 14)&lt;br /&gt;
&lt;br /&gt;
# --- Define local library ---&lt;br /&gt;
add_library(sensor_lib STATIC src/sensor.cpp)&lt;br /&gt;
target_include_directories(sensor_lib PUBLIC include/)&lt;br /&gt;
&lt;br /&gt;
# --- Fetch 3rd Party Library from GitHub ---&lt;br /&gt;
include(FetchContent)&lt;br /&gt;
FetchContent_Declare(&lt;br /&gt;
  json&lt;br /&gt;
  GIT_REPOSITORY https://github.com/nlohmann/json.git&lt;br /&gt;
  GIT_TAG        v3.11.2&lt;br /&gt;
)&lt;br /&gt;
FetchContent_MakeAvailable(json)&lt;br /&gt;
&lt;br /&gt;
# --- Define Executable ---&lt;br /&gt;
add_executable(firmware src/main.cpp)&lt;br /&gt;
&lt;br /&gt;
# Link BOTH our local hardware library AND the remote JSON library&lt;br /&gt;
# (The remote library exposes a target named &amp;#039;nlohmann_json::nlohmann_json&amp;#039;)&lt;br /&gt;
target_link_libraries(firmware PRIVATE sensor_lib nlohmann_json::nlohmann_json)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Use the JSON Library in Code ===&lt;br /&gt;
Open &amp;lt;code&amp;gt;src/main.cpp&amp;lt;/code&amp;gt; and update it to serialize our sensor data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;../include/sensor.h&amp;quot;&lt;br /&gt;
#include &amp;lt;nlohmann/json.hpp&amp;gt; // Included from the fetched library!&lt;br /&gt;
&lt;br /&gt;
using json = nlohmann::json;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Starting IoT Node...&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    init_sensor();&lt;br /&gt;
    &lt;br /&gt;
    SensorData current_data = read_sensor();&lt;br /&gt;
    &lt;br /&gt;
    // Create a JSON object and pack our data into it&lt;br /&gt;
    json payload;&lt;br /&gt;
    payload[&amp;quot;device_id&amp;quot;] = &amp;quot;RPI_NODE_01&amp;quot;;&lt;br /&gt;
    payload[&amp;quot;status&amp;quot;] = &amp;quot;active&amp;quot;;&lt;br /&gt;
    payload[&amp;quot;data&amp;quot;][&amp;quot;temperature&amp;quot;] = current_data.temperature;&lt;br /&gt;
    payload[&amp;quot;data&amp;quot;][&amp;quot;humidity&amp;quot;] = current_data.humidity;&lt;br /&gt;
    &lt;br /&gt;
    // Serialize and print the JSON string&lt;br /&gt;
    std::string network_message = payload.dump(4); // 4 spaces of indentation&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n--- Transmission Payload ---\n&amp;quot; &amp;lt;&amp;lt; network_message &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. The Final Build ===&lt;br /&gt;
Go to your &amp;lt;code&amp;gt;build/&amp;lt;/code&amp;gt; directory. Run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;#039;&amp;#039;Note: This build will take slightly longer because CMake is reaching out to GitHub, downloading the library, and configuring it on the fly.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;./firmware&amp;lt;/code&amp;gt;. You should see a perfectly formatted JSON payload printed to your terminal!&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Lab Deliverable ==&lt;br /&gt;
To receive full credit for this week&amp;#039;s lab, demonstrate the following to your professor or TA:&lt;br /&gt;
# Run &amp;lt;code&amp;gt;./firmware&amp;lt;/code&amp;gt; to show the successful JSON serialization.&lt;br /&gt;
# Show your &amp;lt;code&amp;gt;CMakeLists.txt&amp;lt;/code&amp;gt; file demonstrating the &amp;lt;code&amp;gt;FetchContent&amp;lt;/code&amp;gt; block and &amp;lt;code&amp;gt;target_link_libraries&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Navigate to &amp;lt;code&amp;gt;build/_deps/json-src&amp;lt;/code&amp;gt; in your terminal to prove that CMake successfully downloaded the external repository into the out-of-source build tree.&lt;br /&gt;
# Explain the difference between the &amp;lt;code&amp;gt;PUBLIC&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PRIVATE&amp;lt;/code&amp;gt; keywords in your CMake link step.&lt;/div&gt;</summary>
		<author><name>Rhobincu</name></author>
	</entry>
</feed>