<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Funktionen auslagern, Makefile schreiben]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte einige Funktionen aus meiner Datei auslagern.</p>
<p>1. Wie und was muss ich inkludieren, damit ich auf die Funktionen zugreifen kann?<br />
2. Mein Makefile sieht momentan so aus:</p>
<pre><code># Makefile

CFLAGS+= -v -I/usr/include
LDFLAGS+= -L/usr/lib -l xml2

parseXmlDoc: parseXmlDoc.cc
	$(CC) $(CFLAGS) $(LDFLAGS) parseXmlDoc.cc -o parseXmlDoc
</code></pre>
<p>Wie muss ich das erweitern, damit ich schlussendlich alles beisammen hab?</p>
<p>mfg chuqa</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/152333/funktionen-auslagern-makefile-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 23:40:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152333.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Jul 2006 13:11:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionen auslagern, Makefile schreiben on Wed, 05 Jul 2006 13:11:23 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte einige Funktionen aus meiner Datei auslagern.</p>
<p>1. Wie und was muss ich inkludieren, damit ich auf die Funktionen zugreifen kann?<br />
2. Mein Makefile sieht momentan so aus:</p>
<pre><code># Makefile

CFLAGS+= -v -I/usr/include
LDFLAGS+= -L/usr/lib -l xml2

parseXmlDoc: parseXmlDoc.cc
	$(CC) $(CFLAGS) $(LDFLAGS) parseXmlDoc.cc -o parseXmlDoc
</code></pre>
<p>Wie muss ich das erweitern, damit ich schlussendlich alles beisammen hab?</p>
<p>mfg chuqa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091791</guid><dc:creator><![CDATA[Chuqa]]></dc:creator><pubDate>Wed, 05 Jul 2006 13:11:23 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen auslagern, Makefile schreiben on Wed, 05 Jul 2006 13:31:20 GMT]]></title><description><![CDATA[<p>Ich hoffe ich habe deine Frage nicht falsch verstanden. Hier ein kleines Beispiel... Angenommen du hast folgenden Quelltext</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

void f()
{
  cout &lt;&lt; &quot;Kein langweiliger Standardspruch!\n&quot;;
}

int main()
{
  f();
}
</code></pre>
<p>Nun willst du die Funktion f separieren...</p>
<pre><code class="language-cpp">// f.h
#ifndef __F_H__
#define __F_H__

/*
 * Deklaration: Prototyp der Funktion f
 */

void f();

#endif
</code></pre>
<pre><code class="language-cpp">// f.cpp
#include &quot;f.h&quot;

#include &lt;iostream&gt;
using namespace std;

/*
 * Implementierung der Funktion f
 */

void f()
{
  cout &lt;&lt; &quot;Kein langweiliger Standardspruch!\n&quot;;
}
</code></pre>
<pre><code class="language-cpp">// main.cpp
#include &quot;f.h&quot;

int main()
{
  f();
}
</code></pre>
<p>Das Makefile könnte dann wie folgt aussehen:</p>
<blockquote>
<p>all : test</p>
<p>test : main.o f.o<br />
g++ main.o f.o -o test</p>
<p>main.o : main.cpp<br />
g++ -c main.cpp</p>
<p>f.o : f.cpp<br />
g++ -c f.cpp</p>
<p>clean :<br />
rm -f *~<br />
rm -f *.o</p>
<p>rm : clean<br />
rm -f test</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1091804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091804</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 05 Jul 2006 13:31:20 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen auslagern, Makefile schreiben on Wed, 05 Jul 2006 13:42:59 GMT]]></title><description><![CDATA[<p>Bei so einem einfachen Fall kann das Makefile noch einfacher sein:</p>
<pre><code>CC=$(CXX)
main: main.o f.o
</code></pre>
<p>Das geht, da make bereits einige Standardtargets kennt. So weiß make, wie er aus einer *.cpp-Datei eine *.o-Datei macht.</p>
<p>Wenn jetzt make aufgerufen wird, versucht er, main zu bauen. Er benötigt dazu main.o. Das gibt es nicht. Aber er findet eine main.cpp, aus der er eine erzeugen kann. Genauso verfährt er mit f.o. Auch weiß er, wie man Programme linkt. Das tut er leider mit $CC, welches den c-compiler darstellt. Das funktioniert nicht mit c++ und daher die 1. Zeile, die $CC neu definiert.</p>
<p>CXXFLAGS und LDFLAGS können zusätzlich gesetzt werden. -I/usr/include und -L/usr/lib sind aber unnötig, da diese zu den Standardflags des compilers gehören. Willst Du libxml2 verwenden, reicht ein:</p>
<pre><code>LDFLAGS=-lxml2
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1091817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091817</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Wed, 05 Jul 2006 13:42:59 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen auslagern, Makefile schreiben on Wed, 05 Jul 2006 14:30:10 GMT]]></title><description><![CDATA[<p>Du hast Recht. Aber auf soetwas verlasse ich mich ungern, da es bei etwas älteren Versionen von make nicht Gang und Gebe war.</p>
<p>Wenn man noch zusätzliche Parameter angeben möchte muss man zwangsläufig so vorgehen...</p>
<blockquote>
<p>QTINC = -I/usr/include/qt3<br />
KDEINC = -I/usr/include/kde<br />
QTLIB = -L/usr/lib<br />
KDELIB = -L/usr/lib<br />
QTBIN = /usr/share/qt3/bin</p>
<p>all : ksimplebrowser</p>
<p>ksimplebrowser : main.o ksimplebrowser.o<br />
g++ -O3 $(QTLIB) $(KDELIB) -lkdecore -lkdeui -lqt-mt -lkhtml \<br />
main.o ksimplebrowser.o -o ksimplebrowser</p>
<p>main.o : main.cpp<br />
g++ -c -O3 $(QTINC) $(KDEINC) main.cpp</p>
<p>ksimplebrowser.o : ksimplebrowser.cpp ksimplebrowser.moc<br />
g++ -c -O3 $(QTINC) $(KDEINC) ksimplebrowser.cpp</p>
<p>ksimplebrowser.moc : ksimplebrowser.h<br />
$(QTBIN)/moc ksimplebrowser.h &gt; ksimplebrowser.moc</p>
</blockquote>
<p>/Edit: Wo sind die Tabs geblieben? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091865</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 05 Jul 2006 14:30:10 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen auslagern, Makefile schreiben on Wed, 05 Jul 2006 14:35:12 GMT]]></title><description><![CDATA[<p>Gut danke erstmal,</p>
<p>ich schau mir das morgen dann an,<br />
für heute habe ich erstmal Feierabend <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>mfg chuqa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091873</guid><dc:creator><![CDATA[Chuqa]]></dc:creator><pubDate>Wed, 05 Jul 2006 14:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen auslagern, Makefile schreiben on Thu, 06 Jul 2006 06:39:51 GMT]]></title><description><![CDATA[<p>Ich würde solche definitiven Aussagen, wie &quot;zwangsläufig&quot; lieber nicht verwenden. Schau mal da:</p>
<pre><code>QTINC = -I/usr/include/qt3 
KDEINC = -I/usr/include/kde 
QTLIB = -L/usr/lib 
KDELIB = -L/usr/lib 
QTBIN = /usr/share/qt3/bin
LDFLAGS = $(QTLIB) $(KDELIB) -lkdecore -lkdeui -lqt-mt -lkhtml
CXXFLAGS = -O3 $(QTINC) $(KDEINC)

all : ksimplebrowser 
.moc.h:
    $(QTBIN)/moc $^ &gt; $@

ksimplebrowser : main.o ksimplebrowser.o 
ksimplebrowser.o : ksimplebrowser.cpp ksimplebrowser.h
</code></pre>
<p>(ungetestet)</p>
<p>Das hat ausserdem den Vorteil, daß ich nicht explizit g++ spezifiziere, sondern automatisch der standard-c++-compiler genommen wird. Nicht jedes System basiert auf gcc/g++.</p>
<p>Hilfreich wäre hier auch die Option -M vom gcc. Der compiliert nicht, sondern gibt einfach alle Abhängigkeiten im Makefile-Format aus.</p>
<p>Das -L/usr/lib kann man sich auch sparen, da diese bereits im gcc eincompiliert sind.</p>
<p>-O3 für den Linker ist ausserdem unnötig.</p>
<p>Ich habe jetzt mal mit Leerzeichen eingerückt. Im richtigen Makefile müssen es natürlich Tabs sein.</p>
<p>Für komplexere Projekte empfehle ich autoconf und automake (auch autohell genannt;) ) einsetzen. Kompliziert, aber das Ergebnis ist wirklich brauchbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092202</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Thu, 06 Jul 2006 06:39:51 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen auslagern, Makefile schreiben on Thu, 06 Jul 2006 08:56:12 GMT]]></title><description><![CDATA[<p>So ich glaube ich habe es jetzt.</p>
<p>So siehts aus und funktioniert:</p>
<pre><code>CFLAGS+= -v -I/usr/include
LDFLAGS+= -L/usr/lib -l xml2
OBJECTS = getParamOptions.o

parseXmlDoc: parseXmlDoc.cc $(OBJECTS) Makefile glob.h
	$(CC) $(CFLAGS) $(LDFLAGS) parseXmlDoc.cc -o parseXmlDoc $(OBJECTS)

getParamOptions.o: getParamOptions.cc
	$(CC) -c $(CFLAGS) getParamOptions.cc
</code></pre>
<p>Ich weiß die Flags kann man noch ändern bzw. weglassen, und die OBJECTS kann man bestimmt auch noch um Makefile und glob.h ergänzen und sich damit das unten sparen (?), aber es funktioniert zumindestens und tut seine arbeit ;).<br />
Ich danke euch.</p>
<p>mfg chuqa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092273</guid><dc:creator><![CDATA[Chuqa]]></dc:creator><pubDate>Thu, 06 Jul 2006 08:56:12 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionen auslagern, Makefile schreiben on Thu, 06 Jul 2006 20:33:28 GMT]]></title><description><![CDATA[<p>@ tntnet:</p>
<p>Gut überzeugt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Aber es ist schon vielmehr eine Geschmackssache. Wenn man bedenkt das make nur ein Programm ist das das Programmieren vereinfachen soll; make ist ja schließlich keine Programmiersprache. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092825</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 06 Jul 2006 20:33:28 GMT</pubDate></item></channel></rss>