diff options
author | Andreas Baumann <abaumann@yahoo.com> | 2008-12-21 12:13:55 +0100 |
---|---|---|
committer | Andreas Baumann <abaumann@yahoo.com> | 2008-12-21 12:13:55 +0100 |
commit | 738edc361f66cb8fc48a47563a2f12a60c087f76 (patch) | |
tree | ea53b47b7e6bcd7063bbc5cc02afbf7dcef0d28a /docs/makefiles | |
parent | cd63c8db79eb28f47bbdbfcc9bbf3118de2079fc (diff) | |
download | wolfbones-738edc361f66cb8fc48a47563a2f12a60c087f76.tar.gz wolfbones-738edc361f66cb8fc48a47563a2f12a60c087f76.tar.bz2 |
renamed doc to docs to avoid stupid makefiles to fail (even with .PHONY)
Diffstat (limited to 'docs/makefiles')
-rw-r--r-- | docs/makefiles/README | 5 | ||||
-rw-r--r-- | docs/makefiles/makedepend.html | 1771 |
2 files changed, 1776 insertions, 0 deletions
diff --git a/docs/makefiles/README b/docs/makefiles/README new file mode 100644 index 0000000..64ce754 --- /dev/null +++ b/docs/makefiles/README @@ -0,0 +1,5 @@ +http://make.paulandlesley.org/multi-arch.html +http://mattmccutchen.net/buildsys/index.html +http://cdrecord.berlios.de/private/makefiles.html +http://www.xs4all.nl/~evbergen/nonrecursive-make.html +http://miller.emu.id.au/pmiller/books/rmch/ diff --git a/docs/makefiles/makedepend.html b/docs/makefiles/makedepend.html new file mode 100644 index 0000000..c5b2e77 --- /dev/null +++ b/docs/makefiles/makedepend.html @@ -0,0 +1,1771 @@ +<html><head><!-- Title: gatekeeper --><!--SiteCatalyst code version: G.7. Copyright 1997-2004 Omniture, Inc.
+More info available at http://www.omniture.com
+--> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<script language="JavaScript"> +<!-- +var s_pageName=""; +var s_server=""; +var s_channel=""; +var s_pageType=""; +var s_prop1=""; +var s_prop2=""; +var s_prop3=" | 184406479 | Dependency Management"; +var s_prop4="Dependency Management"; +var s_prop5="Portal | Architecture & Design"; +var s_prop6=""; +var s_prop7="John Graham-Cumming"; +var s_prop8="217.162.109.174 | Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080211 Firefox/2.0.0.12"; +var s_prop9=""; +var s_prop10=""; +var s_prop11=""; +var s_prop12=""; +var s_prop13="http://www.ddj.com/linux-open-source/dhandler.jhtml"; +var s_prop14=""; +var s_prop15=""; +var s_prop16=""; + +/* E-commerce Variables */ +var s_campaign=""; +var s_state=""; +var s_zip=""; +var s_events="event5"; +var s_products=""; +var s_purchaseID=""; +var s_eVar1=""; +var s_eVar2=""; +var s_eVar3=""; +var s_eVar4=""; +var s_eVar5=""; +//--> +</script><title>Dr. Dobb's | Dependency Management | April 1, 2006</title> + + + <meta name="description" content="John explores the irony of Make."> + <meta name="keywords" content="john,explores,irony,make"> + <meta name="headline" content="Dependency Management"> + <meta name="created" content=""> + + +<link rel="Stylesheet" rev="Stylesheet" href="makedepend_files/Layout.css" type="text/css"> +<link rel="Stylesheet" rev="Stylesheet" href="makedepend_files/FontStyles.css" type="text/css"> +<link rel="Stylesheet" rev="Stylesheet" href="makedepend_files/newarticle.css" type="text/css"> +<script src="makedepend_files/popwindow.js"></script> +<script language="javascript"> +<!-- +function jobsopen(){ + document.getElementById("jobscontainer").style.height = ''; + } + +function jobsclose(){ + document.getElementById("jobscontainer").style.height = "41px"; + } + +//--> +</script> +<script language="JavaScript" type="text/javascript"> +var addtoMethod=1; +var AddURL = document.location.href; +var AddTitle = escape(document.title); + +</script> +<script language="JavaScript" src="makedepend_files/add2.js" type="text/javascript"></script></head><body topmargin="0" leftmargin="0" bgcolor="#ffffff" link="#006699" marginheight="0" marginwidth="0" vlink="#006699"><script type="text/javascript" src="makedepend_files/al.html"></script><script type="text/javascript" src="makedepend_files/al_002.html"></script><script type="text/javascript" src="makedepend_files/spit.js"></script><script type="text/javascript" src="makedepend_files/chunks_002.js"></script><script type="text/javascript" src="makedepend_files/chunks_003.js"></script><script type="text/javascript" src="makedepend_files/chunks.js"></script><script type="text/javascript" src="makedepend_files/chunks_004.js"></script><script type="text/javascript" src="makedepend_files/func_200802221208.js"></script><script type="text/javascript" src="makedepend_files/door.js"></script><script type="text/javascript" src="makedepend_files/tsc.js"></script> +<table cellpadding="0" cellspacing="0"> +<tbody><tr> +<td><script> var ckRef=document.referrer; if(ckRef && ckRef.indexOf('/as5/redirect/')==-1 || !ckRef) { document.write('<script language="JavaScript" src="http://i.cmpnet.com/shared/omniture/s_code_remote.js"><\/script>'); document.close(); }</script><script language="JavaScript" src="makedepend_files/s_code_remote.js"></script><img src="makedepend_files/s92783574014196.gif" name="s_i_cmpglobalvista" alt="" border="0" height="1" width="1"></td> +</tr> +</tbody></table> +<!-- End SiteCatalyst code version: G.7. --> + + + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=fullpage&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=75640&AdID=125688&TargetID=2878&Segments=3108,3448,4875,11070,12139&Targets=2625,2878,8607&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3216,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.cmp.com"><img src="makedepend_files/iopsblank.gif" alt="" border="0" height="1" width="1"></a><img src="makedepend_files/TypecountClientType2AdID125688FlightID75640TargetID2878S_004.gif" border="0" height="1" width="1"> + + + + +<!-- CMP LOGO and AD BANNER AT TOP --> +<div id="TopAdContainer"> + <img src="makedepend_files/logo_ThinkServices.gif" alt="" align="left" border="0" height="57" hspace="15" vspace="0" width="125"> + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=top&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=114710&AdID=188279&TargetID=1251&Segments=1551,3108,3317,3382,3448,4653,4875,5470,5750,5766,6111,6877,7717,10552&Targets=1251,2625,2878,4879&Values=34,46,51,63,77,87,91,102,140,203,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.realsoftware.com"><img src="makedepend_files/REAL_Software_Banner.gif" alt="" border="0" height="90" width="728"></a><img src="makedepend_files/TypecountClientType2AdID188279FlightID114710TargetID1251Site.gif" border="0" height="1" width="1"> + + +</div> +<!-- /CMP LOGO and AD BANNER AT TOP --> +<!-- LOGO and USER/PORTAL NAV and SEARCH --> +<table class="elfixo" border="0" cellpadding="0" cellspacing="0" width="990"> + <tbody><tr> + <td rowspan="2" bgcolor="#000000" width="1"><img src="makedepend_files/blank.gif" alt="" border="0" height="1" width="1"></td> + <td colspan="2" bgcolor="#000000" width="362"><img src="makedepend_files/blank.gif" alt="" border="0" height="1" width="362"></td> + + <td bgcolor="#000000" width="397"><img src="makedepend_files/blank.gif" alt="" border="0" height="1" width="397"></td> + <td rowspan="2" bgcolor="#000000" width="1"><img src="makedepend_files/blank.gif" alt="" border="0" height="1" width="1"></td> + </tr> + <tr> + <td align="left" bgcolor="#349f2c" valign="middle" width="362"> + <a href="http://www.ddj.com/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"><img src="makedepend_files/logo_ddj.gif" alt="" border="0" hspace="3" vspace="5"></a></td> + <td align="left" bgcolor="#349f2c" valign="top" width="228"><span class="fphead">FOCAL POINTS: Sponsored Links</span><br> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=focallink1&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a class="fp" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=110047&AdID=182226&TargetID=9101&Segments=3108,3448,4875,12765&Targets=2625,2878,9101&Values=34,46,51,63,77,87,91,102,140,442,656,897,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=&Redirect=http://www.ddj.com/focal/msoffice-oba"> +Focus on Office Business Applications (OBA) +</a> +<br><img src="makedepend_files/TypecountClientType2AdID182226FlightID110047TargetID9101Site.gif" border="0" height="1" width="1"> + + + </td> + <td align="right" bgcolor="#349f2c" valign="middle"><!-- SEARCH --> + <form action="/TechSearch/searchResults.jhtml;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> + <input name="queryText" value="" style="width: 290px; height: 20px;" size="11" class="searchInput" onfocus="this.value=''" type="text"> + <input src="makedepend_files/search.gif" alt="" align="absbottom" hspace="3" type="image" vspace="0"> + </form> + <!-- /SEARCH --> + + <a style="font-family: verdana,sans-serif bold; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(255, 194, 14);" href="http://www.ddj.com/TechSearch/searchResults.jhtml;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN">Site Archive (Complete)</a></td> + </tr> + <!-- /LOGO, and SEARCH --> + <tr> + <td colspan="5" bgcolor="#000000"><img src="makedepend_files/blank.gif" alt="" border="0" height="1" width="250"></td> + </tr> + <tr> + + +<td bgcolor="#000000"></td> +<td colspan="3" bgcolor="#ffb305"> + <div class="portalNAVPad"> + <span class="noLINE"> + <a href="http://www.ddj.com/about.html;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN" class="portalNAV">ABOUT US</a> | + <a href="http://www.ddj.com/contact.html;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN" class="portalNAV">CONTACT</a> | + <a href="http://www.ddj.com/advertise/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN" class="portalNAV">ADVERTISE</a> | + <a href="http://www.ddj.com/subscribe/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN" class="portalNAV">SUBSCRIBE</a> | + <!-- <a href="/pubs/" CLASS=portalNAV>ARCHIVES</a> | --> + <a href="http://www.ddj.com/code/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN" class="portalNAV">SOURCE CODE</a> | + <a href="http://www.ddj.com/currentIssuePage.html;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN" class="portalNAV">CURRENT PRINT ISSUE</a> | + <!-- <a href="`request.getParameter("jiveDomain")+"/jive3/index.jspa"`" CLASS=portalNAV>
+ <param name="categoryID" value="param:ddjCategoryID">FORUMS
+ </a>| --> + <a href="http://www.ddj.com/newsletters/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN" class="portalNAV">NEWSLETTERS</a> + | + <a href="http://www.ddj.com/resources/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN" class="portalNAV">RESOURCES</a> + | + <a href="http://www.ddj.com/blog/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN" class="portalNAV">BLOGS</a> + | + <a href="http://www.ddj.com/mediaCenter/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN" class="portalNAV">PODCASTS</a> + | + <a href="http://www.techcareers.com/?affiliate=ddj" class="portalNAV">CAREERS</a> + </span> + </div> +</td> +<td bgcolor="#000000"></td> + </tr> + <tr> + <td colspan="5" bgcolor="#000000"><img src="makedepend_files/blank.gif" alt="" border="0" height="1" width="250"></td> + </tr> +</tbody></table> +<div style="height: 14px; width: 990px;"> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=txtlink20&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=75640&AdID=125688&TargetID=2878&Segments=3108,3448,4875,12180&Targets=2625,2878,8689&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1646,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.cmp.com"><img src="makedepend_files/iopsblank.gif" alt="" border="0" height="1" width="1"></a><img src="makedepend_files/TypecountClientType2AdID125688FlightID75640TargetID2878S_002.gif" border="0" height="1" width="1"> + + +</div> + <table class="elfixo" border="0" cellpadding="0" cellspacing="0" width="900"> + + <tbody><tr> + <td valign="top"> + <!-- LEFT COL --> + + + + + + + + + + + + + + + + + +<script language="Javascript"> + function launcher(art_id,urlPrefix,siteUrl) { + uri = "/article/emailBox.jhtml?articleID=" +art_id+"&urlPrefix="+ urlPrefix+"&host_url="+siteUrl; + window.open(uri,"","toolbar=no,scrollbars=auto,location=no,status=no,width=480,height=415,resizable=1"); + } +</script> + + + + + + + + + + + +<div class="LColMargin"> + + <a href="http://www.ddj.com/linux-open-source/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"><img src="makedepend_files/header_opensourcen.gif" alt="Open Source" border="0" hspace="0" vspace="0"></a> + <img src="makedepend_files/rule.gif" align="left" border="0" height="1" hspace="0" vspace="0" width="405"><br> + +</div> + +<div class="articlepadding"> + + + + + + + + + + + + + + + + + + + + + + + + <table class="elfixo" align="right" border="0" cellpadding="0" cellspacing="0" width="160"> + <tbody><tr> + <td rowspan="5" width="10"><img src="makedepend_files/blank.gif" border="0" height="1" width="10"></td> + <td width="75"><img src="makedepend_files/blank.gif" border="0" height="1" width="75"></td> + <td width="75"><img src="makedepend_files/blank.gif" border="0" height="1" width="75"></td> + </tr> + <tr><td valign="top"> + + <img src="makedepend_files/redsquare.gif" align="absmiddle" border="0" height="12" hspace="0" vspace="0" width="15"><a href="javascript:launcher(184406479,'/linux-open-source/','www.ddj.com')" title="Send As Email">Email</a><br> <!--
+ <img src="http://i.cmpnet.com/ddj/redsquare.gif" width="15" height="12" hspace="0" vspace="0" border="0" align="absmiddle"><a href="#articleComments">Discuss</a>
+ --> + </td> + <td valign="top"> + <img src="makedepend_files/redsquare.gif" align="absmiddle" border="0" height="12" hspace="0" vspace="0" width="15"><a href="http://www.ddj.com/article/printableArticle.jhtml;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?articleID=184406479&dept_url=/linux-open-source/">Print</a><br> + <img src="makedepend_files/redsquare.gif" align="absmiddle" border="0" height="12" hspace="0" vspace="0" width="15"><a href="http://www.cmpreprints.com/faxback.jhtml" target="_new">Reprint</a> + </td></tr> + <tr> + <td colspan="2" style="padding: 7px 0pt 0pt;" height="7" valign="middle"><div align="center"><img src="makedepend_files/dotted_line3.gif" border="0" height="1" hspace="0" vspace="0" width="140"><br><span class="add2header">add to:</span></div></td> + </tr> + <tr> + <td valign="top"><img src="makedepend_files/redsquare.gif" align="absmiddle" border="0" height="12" hspace="0" vspace="0" width="15"><span class="add2ddj" title="Add this page to Delicious" onclick="addto(2)"><u>Del.icio.us</u></span><br> + <img src="makedepend_files/redsquare.gif" align="absmiddle" border="0" height="12" hspace="0" vspace="0" width="15"><span class="add2ddj" title="Add this page to Digg" onclick="addto(3)"><u>Digg</u></span><br> + <img src="makedepend_files/redsquare.gif" align="absmiddle" border="0" height="12" hspace="0" vspace="0" width="15"><span class="add2ddj" title="Add this page to Google" onclick="addto(5)"><u>Google</u></span><br> + <img src="makedepend_files/redsquare.gif" align="absmiddle" border="0" height="12" hspace="0" vspace="0" width="15"><span class="add2ddj" title="Add this page to Spurl" onclick="addto(8)"><u>Spurl</u></span> + </td> + <td valign="top"> <img src="makedepend_files/redsquare.gif" align="absmiddle" border="0" height="12" hspace="0" vspace="0" width="15"><span class="add2ddj" title="Add this page to Slashdot" onclick="addto(6)"><u>Slashdot</u></span><br> + <img src="makedepend_files/redsquare.gif" align="absmiddle" border="0" height="12" hspace="0" vspace="0" width="15"><span class="add2ddj" title="Add this page to Yahoo! MyWeb" onclick="addto(7)"><u>Y! MyWeb</u></span><br> + <img src="makedepend_files/redsquare.gif" align="absmiddle" border="0" height="12" hspace="0" vspace="0" width="15"><span class="add2ddj" title="Add this page to Blink" onclick="addto(1)"><u>Blink</u></span><br> + <img src="makedepend_files/redsquare.gif" align="absmiddle" border="0" height="12" hspace="0" vspace="0" width="15"><span class="add2ddj" title="Add this page to Furl" onclick="addto(4)"><u>Furl</u></span> + </td> + </tr> + + + + + + + + + + + + + + + </tbody></table> + <div class="Bspace4"> + <em>April 01, 2006</em><br> + + <h5>Dependency Management</h5> + <h2>The irony of Make</h2> + </div> + + + + + + + <div class="Bspace15"><em>John Graham-Cumming</em></div> + + + + + + + + + <!-- teaser --> + <div class="Bspace15"><span class="greenBlurb">John explores the irony of Make.</span></div> + <!-- end teaser --> + + + + +<p> +<i>John is vice president of engineering at Electric Cloud, which +focuses on reducing software build times. He can be contacted at +jgc@electric-cloud.com.</i> +</p><p> +</p><hr> +<p> + +</p><p> + +</p><p> + +</p><p> +Make giveth and Make taketh away. It's ironic that the tool Make, +designed to solve the "I've changed some source now what do I need to +recompile?" problem, creates dependency nightmares.</p> +<p> + +</p><p> +Any project larger than a "Hello World" example faces dependency +management problems. Dependencies must be generated and kept up to date +as you add to, modify, and delete from the project. And Make itself +provides no tools for dealing with this problem—all Make provides is a +mechanism for expressing the relationships between <a itxtdid="4050710" target="_blank" href="#" style="border-bottom: medium none; font-weight: bold; text-decoration: none; padding-bottom: 0px; color: darkblue; background-color: transparent; cursor: pointer;" classname="iAs" class="iAs"><nobr>files<img style="border: 0pt none ; margin: 0pt; padding: 0pt; height: 10px; width: 10px; position: relative; top: 1px; left: 1px; float: none; display: inline;" src="makedepend_files/3.gif"></nobr></a> with its familiar<i> target : prerequisite1 prerequisite2... </i>syntax.</p> +<p> + +</p><p> +The target of the rule (the file that will be built) appears before the +colon (:) and the files that the target depends upon (called either the +"dependencies" or "prerequisites") appears after the colon (:). For +example:</p> +<p> +</p><blockquote> +foo.o : foo.c header.h<br> +<p> +</p></blockquote> +<p> + +</p><p> +has target <i>foo.o</i> and prerequisites <i>foo.c</i> and <i>header.h</i>.</p> +<p> + +</p><p> +Even Make's dependency syntax is flawed because it incorporates both +"foo.o must be updated if header.h or foo.c are changed" and "foo.o is +the result of compiling foo.c". Thus, anything to the right of the ":" +is a prerequisite, but the first prerequisite where there's a rule body +(that is, commands) is special—it's the prerequisite that's passed to +the compiler (or other command) to actually generate the target. </p> +<p> + +</p><p> +Look at this GNU Make example (I use GNU Make throughout this article +because of its wide platform coverage and large set of features): </p> +<p> +</p><blockquote> +foo.o: foo.c header.h system.h<br> + @echo Compiling $@ from $<...<br> +<p> +</p></blockquote> +<p> + +</p><p> +which outputs:</p> +<p> +</p><blockquote> +Compiling foo.o from foo.c...<br> +<p> +</p></blockquote> +<p> + +</p><p> +Here, <i>foo.o</i> is built if <i>foo.c</i>, <i>header.h</i>, or <i>system.h</i> change, but the rule also states that <i>foo.o</i> is made from <i>foo.c</i> (in GNU Make terms, the target of the rule to the left side of the ":" is written <i>$@</i> and the first prerequisite is <i>$<</i>). If the example were written like this:</p> +<p> +</p><blockquote> +foo.o: foo.c<br> +foo.o: header.h system.h<br> + @echo Compiling $@ from $<...<br> +<p> +</p></blockquote> +<p> + +</p><p> +the output would be:</p> +<p> +</p><blockquote> +Compiling foo.o from header.h...<br> +<p> +</p></blockquote> +<p> + +</p><p> +which is clearly wrong. If you want to continue exploring Make's idiosyncrasies with <i>$<</i>, play around with this Makefile:</p> +<p> +</p><blockquote> +foo.o: header.h<br> +foo.o: system.h<br> +foo.o: foo.c<br> +foo.o:<br> + @echo Compiling $@ from $<...<br> +<p> +</p></blockquote> +<p> + +</p><p> +and try permuting the first three lines to see how Make's interpretation of the Makefile changes.</p> +<p> + +</p><p> +The biggest problem of all is generating these rules for a large +project. In the rest of this article, I use this contrived example +Makefile as a starting point:</p> +<p> +</p><blockquote> +.PHONY: all<br> + all: foo.o bar.o baz.o<br> +<br> + foo.o: foo.c foo.h common.h header.h<br> + bar.o: bar.c bar.h common.h header.h ba.h<br> + baz.o: baz.c baz.h common.h header.h ba.h<br> +<p> +</p></blockquote> +<p> + +</p><p> +Three object files (foo.o, bar.o, and baz.o) are built from +corresponding C files (foo.c, bar.c, and baz.c). Each .o file has +dependencies on various header files as expressed in the Makefile. The +Makefile uses GNU Make's built-in rules to perform compilation using +the system's compiler.</p> +<p> + +</p><p> +There's no mention here of the final executable being built because I +concentrate on dealing with dependencies between sources and objects. +Relationships between objects are usually easier to maintain by hand as +there are fewer of them and the relationships are part of the product +design.</p> +<p> + +</p><p> +Because maintaining any real Makefile by hand is impossible, many +projects use the widely available makedepend program (makedepend is +usually installed on UNIX and CYGWIN systems). makedepend reads C and +C++ files looking at the <i>#include </i>statements, follows the <i>#include</i>s, and builds the dependency lines for you. A basic way of incorporating makedepend in a project is a special <i>depend</i> target:</p> +<p> +</p><blockquote> +.PHONY: all<br> + all: foo.o bar.o baz.o<br> +<br> + SRCS = foo.c bar.c baz.c<br> +<br> + DEPENDS = dependencies.mk<br> + .PHONY: depend<br> + depend:<br> + @makedepend -f - $(SRCS) > $(DEPENDS)<br> + -include $(DEPENDS)<br> +<p> +</p></blockquote> +<p> + +</p><p> +Doing <i>makedepend </i>with this Makefile causes the depend rule to execute, which runs makedepend on the sources (defined in the <i>SRCS</i> variable) and outputs the dependency lines to dependencies.mk (defined by the <i>DEPENDS</i> variable).</p> +<p> + +</p><p> +The Makefile includes the dependencies lines in its final line. dependencies.mk looks like this:</p> +<p> +</p><blockquote> +# DO NOT DELETE<br> +<br> +foo.o: foo.h header.h common.h<br> +bar.o: bar.h header.h common.h ba.h<br> +baz.o: baz.h header.h common.h ba.h<br> +<p> +</p></blockquote> +<p> + +</p><p> +Notice that makedepend doesn't try to define the relationship between +an object file (for example, foo.o) and the source file it is made from +(foo.c). In this case, GNU Make's standard rules automatically find the +related .c file. There are two problems with the makedepend<i> </i>style: </p> +<p> + +</p><p> +</p><ul> + <li>Running makedepend can be slow, as every source file has to be searched even if there are no changes.</li> + <li>It's a manual step. Before every make, users have to do <i>makedepend</i> to ensure that the dependencies are correct. </li> +</ul> +<p> + +</p><p> + +</p><p> +The answer to these problems is automation. Here's a version of the +Makefile that still uses makedepend to generate dependencies, but +automates the process, and only runs makedepend for sources that have +changed: </p> +<p> +</p><blockquote> +.PHONY: all<br> + all: foo.o bar.o baz.o<br> + SRCS = foo.c bar.c baz.c<br> + %.d : %.c<br> + @makedepend -f - $< | sed 's,\($*\.o\)[ :]*,\1<br> + $@ : ,g' > $@<br> + -include $(SRCS:.c=.d)<br> +<p> +</p></blockquote> +<p> + +</p><p> +It works by associating a .d file with each .c; for example, foo.o has +a foo.d file that only contains the dependency line for foo.o. Here are +foo.d's contents:</p> +<p> +</p><blockquote> +# DO NOT DELETE<br> +foo.o foo.d : foo.h header.h common.h<br> +<p> +</p></blockquote> +<p> + +</p><p> +This line specifies when to rebuild foo.o, but also that foo.d should +be rebuilt under the same conditions—if any of the sources associated +with foo.o change, then foo.d gets rebuilt. foo.c isn't mentioned in +this list because it's mentioned as part of the pattern rule for +rebuilding a .d file (<i>%.d : %.c</i> +means that foo.d gets rebuilt if foo.c itself changes). foo.d got added +to the dependency line created by makedepend using the aforementioned <i>sed</i> magic.</p> +<p> + +</p><p> +The final line of the Makefile includes all the .d files: The <i>$(SRCS:.c=.d)</i> macro transforms the list of sources in the <i>SRCS</i> variable by changing the extension from .c to .d. The <i>include</i> +also tells GNU Make to check to see if the .d files need rebuilding. +GNU Make looks to see if there are rules to rebuild included Makefiles +(in this case, the .d files), rebuilds them if necessary (following the +dependencies specified in the Makefile), then restarts. This "Makefile +remaking" feature (see section 3.7 "How Makefiles Are Remade" in the +FSF's GNU Make manual; +http://www.gnu.org/software/make/manual/html_mono/make.html#SEC20) +means that simply typing "make" will rebuild any dependency files that +need rebuilding—but only if the sources have changed. Then, GNU Make +will perform the build, taking into account the new dependencies.</p> +<p> + +</p><p> +Unfortunately, this Makefile breaks with a fatal error if a header file +is removed. If header.h is no longer needed and all references to it +are removed from the .c files and the file is removed from disk, this +error occurs when Make is run:</p> +<p> +</p><blockquote> +No rule to make target 'header.h', <br> + needed by 'foo.d'.<br> +<p> +</p></blockquote> +<p> + +</p><p> +This happens because header.h is still mentioned in foo.d as being a +prerequisite of foo.d; hence, foo.d cannot be rebuilt. This Catch-22 +can be fixed by making the generation of foo.d smarter. The new foo.d +includes the dependencies for foo.o and foo.d separately. foo.d's +dependencies are wrapped in a call to GNU Make's <i>$(wildcard)</i> +function (see section 4.4.3 "The Function Wildcard" in the FSF's GNU +Make manual; http://www.gnu.org/software/make/manual/html_mono/make +.html#SEC33). Here's the new foo.d:</p> +<p> +</p><blockquote> +# DO NOT DELETE<br> +foo.d : <br> + $(wildcard foo.h header.h common.h)<br> +foo.o : foo.h header.h common.h<br> +<p> +</p></blockquote> +<p> + +</p><p> +And here's the updated Makefile with a new invocation of <i>makedepend</i>, followed by a <i>sed</i> line that creates the modified .d file:</p> +<p> +</p><blockquote> +.PHONY: all<br> + all: foo.o bar.o baz.o<br> + SRCS = foo.c bar.c baz.c<br> + %.d : %.c<br> + @makedepend -f - $< | sed 's,<br> + \($*\.o\)[ :]*\(.*\),<br> + $@ : $$\(wildcard \2\)\n\1 : \2,g' > $@<br> + -include $(SRCS:.c=.d)<br> +<p> +</p></blockquote> +<p> + +</p><p> +Now removing a header file doesn't break the Make: When foo.d is parsed, the dependency line for foo.d is passed through <i>$(wildcard)</i>. When there are no globbing symbols such as "*" or "?" in the filename, <i>$(wildcard) </i>acts +as an existence filter, removing those files that don't exist from the +list. So, if header.h had been removed, the first line of foo.d would +be equivalent to: </p> +<p> +</p><blockquote> +foo.d : foo.h common.h<br> +<p> +</p></blockquote> +<p> + +</p><p> +and the Make would work correctly. This example Makefile now works when .c files are added (users just update <i>SRCS</i> and the new .d file is created automatically), when .c files are removed (users update <i>SRCS</i> +and the old .d file is ignored), and when headers are added (because +that requires touching an existing .c or .h, the .d file is +regenerated). And when they are removed, the <i>$(wildcard) </i>hides the deletion and the .d file is regenerated.</p> +<p> + +</p><p> +An optimization is to remove the need for GNU Make to restart by +merging the rule that makes the .d file into the rule that makes the .o +file. Because the .d file is updated if (and only if) the .o file needs +to be updated (both are updated when any of the sources for the .o +change), it's possible to have the <i>makedepend</i> occur at the same time as the compilation:</p> +<p> +</p><blockquote> +.PHONY: all<br> + all: foo.o bar.o baz.o<br> + SRCS = foo.c bar.c baz.c<br> + %.o : %.c<br> + @makedepend -f - $< | <br> + sed 's,\($*\.o\)[ :]*\(.*\),<br> + $@ : $$\(wildcard \2\)\n\1 : \2,g' > $*.d<br> + @$(COMPILE.c) -o $@ $<<br> + -include $(SRCS:.c=.d)<br> +<p> +</p></blockquote> +<p> + +</p><p> +This rule makes use of <i>$*</i>, another GNU Make variable. <i>$*</i> is the part of the pattern <i>%.c</i> that matches the %. If this rule is building foo.o from foo.c, then <i>$*</i> is just <i>foo</i>. <i>$*</i> +is used to create the name of the .d file that makedepend writes to. +This final version does not use GNU Make's "Makefile remaking" system. +There are no rules for making .d files (they are made as a side effect +of making the .o); hence, GNU Make does not have to restart, providing +the best combination of accuracy and speed possible.</p> +<p> + +</p><p> +In general, it's a bad idea to have a rule that makes multiple files +because it's impossible for GNU Make to find the rule that makes a file +if it's created as a side effect of something else. In this case, that +behavior is desired: You want to hide the creation of .d files from GNU +Make so that it doesn't try to make them and then have to restart. A +similar idea was proposed by Tom Tromey, without the <i>$(wildcard) </i>trick, +and more information about building dependency files can be found on +the GNU Make maintainer Paul Smith's web site at +http://make.paulandlesley.org/autodep.html. Another good resource for +any GNU Make developer—once you've purchased the FSF's GNU Make +manual—is Robert Mecklenburg's <i>Managing Projects with GNU Make </i>(O'Reilly & Associates, 2004). </p> +<p> + +</p><p> +Finally, it's possible to omit makedepend altogether if you are using the GNU GCC compiler. It has a <i>-MD</i> option that does the work of makedepend at the same time as the compilation:</p> +<p> +</p><blockquote> +.PHONY: all<br> + all: foo.o bar.o baz.o<br> + SRCS = foo.c bar.c baz.c<br> + %.o : %.c<br> + @$(COMPILE.c) -MD -o $@ $<<br> + @sed -i 's,\($*\.o\)[ :]*\(.*\),<br> + $@ : $$\(wildcard<br> + \2\)\n\1 : \2,g' $*.d<br> + -include $(SRCS:.c=.d)<br> +<p> +</p></blockquote> +<p> + +</p><p> +For example, the compilation step for foo.o will create foo.d from foo.c and then <i>sed</i> is run on the foo.d to add the extra line for foo.d containing the <i>$(wildcard)</i>.</p> +<p> + +</p><p> +The use of GCC <i>-MD</i> is an example of creating +dependencies without using makedepend. There are a number of other +possibilities. For example, GCC has <i>-M </i>and <i>-MM</i> options that just output dependency information (<i>-M</i> outputs all dependencies and <i>-MM</i> omits the system headers because they are unlikely to change).</p> +<p> + +</p><p> +Another option is the program fastdep +(http://www.irule.be/bvh/c++/fastdep/), which aims to be a fast +replacement for makedepend. Finally, Windows programmers can use +Microsoft CL's <i>/showincludes </i>option to get include information and build dependency information.</p> +<p> + +</p><p> +All of these solutions share some common problems. They only work well +for C and C++ code and need to be modified to handle other languages +(although luckily, not all languages have the same dependency forests +as C and C++). In addition, the files included might change as the +result of preprocessor defines; hence, makedepend (or an equivalent +program) needs to be told about any command line <i>-D</i> defines so that it builds the right dependency information.</p> +<p> + +</p><p> +Despite the problems outlined here, these Makefile snippets do provide +a reliable way of keeping C and C++ dependencies up to date +automatically and quickly.</p> +<p> + +</p><p> + +<b>DDJ</b></p> +<p> + +</p><p> + +</p><div class="Bspace15"> + <em><a href="http://www.ddj.com/authors/authorInfo.jhtml;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?authorID="><strong></strong></a> <a href="mailto:"><strong></strong></a></em> + </div> + + + <center> + + + + + + + + + + + + + + + + + + + + + </center> + + + + +<!-- ARTICLE COMMENTS--> +<!--
+<a name="articleComments"></a>
+<br>
+<droplet src="/article/articleComments.jhtml">
+<param name="articleTitle" value="param:element.headline">
+<param name="articleID" value="param:articleID">
+<param name="commentsOpen" value="true">
+</droplet>
+--> +<!-- AROUND THE WEB AND TOP 5 ARTICLES --> +<table class="elfixo" border="0" cellpadding="0" cellspacing="0" width="467"> +<tbody><tr> + <td width="229"><img src="makedepend_files/blank.gif" border="0" height="1" width="229"></td> + <td width="9"><img src="makedepend_files/blank.gif" border="0" height="1" width="9"></td> + <td width="229"><img src="makedepend_files/blank.gif" border="0" height="1" width="229"></td> +</tr> +<tr> + <td valign="top"> + <!-- AROUND THE WEB --> + <!-- AROUND THE WEB --> + <div id="GreenContainerBoxSM2"> + <div id="GreenBARSM2"><span class="BARTitles">RELATED ARTICLES</span></div> + + + + + + + + +<div class="PaddingStyle2"> + + + + + + + + + + + <div class="Bspace5"> + <a href="http://www.ddj.com/206902785;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> + Wireless Emergency Communications Tests Looking Good</a> + </div> + + + + + + + + + + <div class="Bspace5"> + <a href="http://www.ddj.com/security/206902613;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> + The Silverlight 2.0 Security Model</a> + </div> + + + + + + + + + + <div class="Bspace5"> + <a href="http://www.ddj.com/mobile/206901832;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> + Nokia to Add Silverlight Support</a> + </div> + + + + + + + + + + <div class="Bspace5"> + <a href="http://www.ddj.com/embedded/206901624;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> + Texture for Haptic Interfaces</a> + </div> + + + + + + + + + + <div class="Bspace5"> + <a href="http://www.ddj.com/hpc-high-performance-computing/206901618;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> + Guibas Receives ACM/AAAI Award for Algorithm Development</a> + </div> + + +</div> + </div> + </td> + <td width="9"><img src="makedepend_files/blank.gif" alt="" border="0" height="1" width="9"></td> + <td valign="top"> + <!-- TOP 5 ARTICLES --> + <div id="GreenContainerBoxSM2"><div id="GreenBARSM2"><span class="BARTitles">TOP 5 ARTICLES</span></div> + <div class="PaddingStyle2"> + + + + + + + + + + +<div class="PaddingStyle2"> + + + + + + + + + + + + + + + + + + + + + + <div class="Bspace5"> + <a href="http://www.ddj.com/cpp/204202899;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> + Building Your Own Plugin Framework: Part 1 + </a></div> + + + + + + + + + + + + + + + + + + + + + + + <div class="Bspace5"> + <a href="http://www.ddj.com/cpp/206503957;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> + Building Your Own Plugin Framework: Part 5 + </a></div> + + + + + + + + + + + + + + + <div class="Bspace5"> + <a href="http://www.ddj.com/cpp/204702751;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> + Building Your Own Plugin Framework: Part 2 + </a></div> + + + + + + + + + + + + + + + <div class="Bspace5"> + <a href="http://www.ddj.com/architect/186100398;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> + Maven: Building Complex Systems + </a></div> + + + + + + + + + + + + + + + <div class="Bspace5"> + <a href="http://www.ddj.com/database/202802959;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> + Query Anything with SQLite + </a></div> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +</div> + + </div> + </div></td> +</tr> +</tbody></table> +</div> + + + </td> + <td width="10"><img src="makedepend_files/blank.gif" alt="" border="0" height="1" width="10"></td> + <td valign="top"> + <!-- RIGHT COL --> + + + + +<!-- RIGHT COL --> + +<!-- ARTICLE contaier table for media center and departments --> +<table class="elfixo" border="0" cellpadding="0" cellspacing="0" width="575"> +<tbody><tr> <td rowspan="2" valign="top" width="400"> + +<!-- YET TO RECEIVE AD PARAMS--> + + <div class="clear"> + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=sponsbox&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<div id="SponsorBox"> +<div id="SponsorBar"> + +<span class="miniBARTitles">LIFE 2.0 SUMMIT SPRING 2008</span> +</div> +<div class="SPONSORPad"> +Join us on the CMP Region for Life 2.0 Summit Spring, a virtual conference, happening in Second Life.<a target="_blank" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=113304&AdID=186384&TargetID=9027&Segments=3108,3448,4875,7711,7716,12683&Targets=2625,2878,9027&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3544,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=&Redirect=http://www.life20.net/register.php?event=l20spring08"> Register for your COMPLIMENTARY PASS today!</a></div> +</div><img src="makedepend_files/TypecountClientType2AdID186384FlightID113304TargetID9027Site.gif" border="0" height="1" width="1"> + + </div> + + +<!------------------------DDJ UNIVERSITY ---------------> +<!--
+<div id="SponsorBar" style="background-color: blue;color: white;">
+<span class="miniBARTitles">DR. DOBB'S UNIVERSITY</span>
+</div>
+<div style="width: 100%; padding: 5px 0px 5px 5px;border: 1px solid black;margin-bottom: 5px;">
+Dr. Dobb's new e-learning platform, Dr. Dobb's University, gives you access to select conference sessions from Dr. Dobb's world-class developer events. Available courses focus on such topics as <a href="http://www.ddj.com/architect/ddjuniversity.jhtml">Architecture & Design</a>, <a href="http://www.ddj.com/cpp/ddjuniversity.jhtml">C/C++</a>, <a href="http://www.ddj.com/database/ddjuniversity.jhtml">Database engineering</a>, <a href="http://www.ddj.com/development-tools/ddjuniversity.jhtml">Development tools</a>, <a href="http://www.ddj.com/embedded/ddjuniversity.jhtml">Embedded systems</a>, <a href="http://www.ddj.com/hpc-high-performance-computing/ddjuniversity.jhtml">HPC</a>, <a href="http://www.ddj.com/java/ddjuniversity.jhtml">Java</a>, <a href="http://www.ddj.com/mobile/ddjuniversity.jhtml">Mobility</a>, <a href="http://www.ddj.com/linux-open-source/ddjuniversity.jhtml">Open Source</a>, <a href="http://www.ddj.com/security/ddjuniversity.jhtml">Security</a>, <a href="http://www.ddj.com/web-development/ddjuniversity.jhtml">Web Development</a> and <a href="http://www.ddj.com/windows/ddjuniversity.jhtml">Windows/.NET</a>.
+
+</div> --> + + +<!----------------------SEARCH JOBS BOX-----------------> + +<div id="jobscontainer" style="overflow: hidden; height: 41px; width: 402px;"> + +<form method="post" action="http://www.TechCareers.com/js/action/searchresults.asp?affiliate=ddj&_DARGS=/template_parts/dept/right/right.jhtml" id="form1" name="form1"> + +<input name="FOrderBy" value="modifydate[d]" type="hidden"> +<div id="TechCareersBox"> +<div id="SponsorBar" style="background-color: teal;"> +<span class="miniBARTitles">DR. DOBB'S CAREER CENTER</span> + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=careers1&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=75640&AdID=125688&TargetID=2878&Segments=3108,3448,4875,11102&Targets=2625,2878&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1339,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4377,4799,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.cmp.com"><img src="makedepend_files/iopsblank.gif" alt="" border="0" height="1" width="1"></a><img src="makedepend_files/TypecountClientType2AdID125688FlightID75640TargetID2878S_003.gif" border="0" height="1" width="1"> + + +</div> +<div style="padding: 5px 0px 5px 5px; width: 100%;"> +Ready to take that job and shove it? <span style="text-decoration: underline;" class="pointerhand" onclick="jobsopen()">open</span> | <span style="text-decoration: underline;" class="pointerhand" onclick="jobsclose()">close</span><br> +</div> +</div> +<table bgcolor="#000000" border="0" cellpadding="5" cellspacing="1" width="100%"> + + <tbody><tr bgcolor="#ffffff"> + <td colspan="2" class="noLINE" bgcolor="#cde5e8" valign="top"> <b>Search jobs on</b> <a class="thirteenBOLD" href="http://www.techcareers.com/?affiliate=ddj">Dr. Dobb's TechCareers</a></td> + </tr> + <tr bgcolor="#ffffff"> + <td valign="top" width="50%"> +<table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tbody><tr> + <td valign="top"> + + <div><strong>Function:</strong><br> <select name="FCareerFocus1" size="1"> + <option value="23">Information Technology</option> + <option value="25">Engineering</option> + </select></div> + <br> + <div><strong>Keyword(s):</strong><br> + <input name="FKeywords" size="25"></div> + <br> + <div><b>State:</b> <input name="FState" size="8" maxlength="2"> <input value="Go" id="submit1" name="submit1" align="right" type="submit"></div> + </td> + + </tr> + </tbody></table> + + </td> + <td class="noLINE" valign="top" width="50%"> + <!------------------FEATURED JOB-----------------> + +<li><a href="http://www.techcareers.com/JS/Form/SignUpForm.asp?affiliate=ddj">Post Your Resume</a> +</li><li><a href="http://www.techcareers.com/MKT/Content/EMP/Default.asp?affiliate=ddj">Employers Area</a> +</li><li><a href="http://www.techcareers.com/content/news.asp?affiliate=ddj">News & Features</a> +</li><li><a href="http://www.techcareers.com/content/forum.asp?affiliate=ddj">Blogs & Forums</a> +</li><li><a href="http://www.techcareers.com/JS/CareerResources/?affiliate=ddj">Career Resources</a> +<br><br> +<b>Browse By:</b> <br> + <a href="http://www.techcareers.com/JS/JobSearch/?affiliate=ddj">Location</a> | <a href="http://www.techcareers.com/JS/JobSearch/?affiliate=ddj">Employer</a> | <a href="http://www.techcareers.com/JS/JobSearch/?affiliate=ddj">City</a><br> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=careers2&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=75634&AdID=125682&TargetID=2625&Segments=3108,3448,4875,11103&Targets=2625,2878&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1339,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4378,4799,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.cmp.com"><img src="makedepend_files/iopsblank.gif" alt="" border="0" height="1" width="1"></a><img src="makedepend_files/TypecountClientType2AdID125682FlightID75634TargetID2625S_002.gif" border="0" height="1" width="1"> + + + </li></td> + </tr> + + <tr bgcolor="#ffffff"> + <td colspan="2" bgcolor="#cde5e8" valign="top"><b>Most Recent Posts:</b></td> + </tr> + <tr bgcolor="#ffffff"> + <td colspan="2" class="noLINE" valign="top"> + <!-- <script language=javascript
+src=http://www.4jobs.com/common/partnership/jobs/display.asp?max=4&col=1&par=http://www.techcareers.com&slo=N&vj=N&des=y&ran=Y&i1=23&aor=OR&loc=Y&ind=N&sal=N&comp=Y&bc=FFFFFF&bg=FFFFFF&jbc=FFFFFF&jbg=FFFFFF&pad=5&wid=&tar=n&qsn1=affiliate&qsv1=ddj&date=Y></script> --> +<!-- <script language="javascript" src="http://www.dobbsprojects.com/prox/tcrss.js"></script> --> +<script language="javascript" src="makedepend_files/tcrss.js"></script><a href="http://www.techcareers.com/JS/General/Job.asp?id=15331393&affiliate=ddj">Software Sales Specialist</a><br>Hewlett Packard seeking Software Sales Specialist in San Francisco, CA<br><br><a href="http://www.techcareers.com/JS/General/Job.asp?id=16147525&affiliate=ddj">Programmer / System Analyst</a><br>American First CU seeking Programmer / System Analyst in La Habra, CA<br><br><a href="http://www.techcareers.com/JS/General/Job.asp?id=16181149&affiliate=ddj">Senior Engineer</a><br>Mine Safety Appliances seeking Senior Engineer in Cranberry Twp, PA<br><br><a href="http://www.techcareers.com/JS/General/Job.asp?id=14466217&affiliate=ddj">Sr Staff Circuit Designer</a><br>Xilinx seeking Sr Staff Circuit Designer in San Jose, CA<br><br><a href="http://www.techcareers.com/JS/General/Job.asp?id=15501072&affiliate=ddj">Senior Embedded Applications Software Developer</a><br>SigmaTel seeking Senior Embedded Applications Software Developer in Austin, TX<br><br></td> + </tr> +</tbody></table> +</form> +</div> +<div class="Bspace15"></div> +<!----------------------END SEARCH JOBS BOX-----------------> +<br> +<!-- VIDEO BOX --> + + +<!-- END VIDEO BOX --> + +<br> + +<div align="center"> + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=jumbobox&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=107968&AdID=182668&TargetID=3885&Segments=3108,3448,4569,4669,4827,4875,5385,5472,6879,6939,7714,10554,14042,14113&Targets=2625,2878,3885,4532,10200&Values=34,46,51,63,77,87,91,102,140,290,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.eetimes.semiconductor.com%3Fcid%3DSDW"><img src="makedepend_files/ips_ostd1_336x280_ddj.gif" alt="" border="0" height="280" width="336"></a><img src="makedepend_files/TypecountClientType2AdID182668FlightID107968TargetID3885Site.gif" border="0" height="1" width="1"> + + </div> + <br> + + + + <table> + <tbody><tr> + <td valign="top"> + + + <!-- <img src="http://i.cmpnet.com/ddj/rule.gif" width="180" height="1" hspace="0" vspace="0" border="0" alt=""> --> + <!-- INFO LINK--> + + +<table border="0" width="100"> + <tbody><tr> + <td valign="top"><!-- MICROSITES --> + <div id="ArticlerightcolBox"> + <div id="TOCBAR"><span class="BARTitles">MICROSITES</span></div> + <div class="PaddingStyle2"> + <span class="blogName">FEATURED TOPIC</span> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=microsite1&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=110126&AdID=182335&TargetID=8824&Segments=3108,3448,4875,12454&Targets=2625,2878,8824&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4799,5161,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.ddj.com/focal/msoffice-oba"><img src="makedepend_files/125x125_411_PDQ.gif" alt="" border="0" height="125" width="125"></a><img src="makedepend_files/TypecountClientType2AdID182335FlightID110126TargetID8824Site.gif" border="0" height="1" width="1"> + + + <br><br> + <span class="blogName">ADDITIONAL TOPICS</span> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=microsite2&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_blank" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=110127&AdID=182336&TargetID=8823&Segments=3108,3448,4875,12455&Targets=2625,2878,8823&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4799,5162,6193,6293,6332,6392,6393,6422&RawValues=&Redirect=http://www.ddj.com/focal/msoffice-oba">"Get the 411 on OBA PDQ! Learn to build and deploy Microsoft Office Business Applications"</a><img src="makedepend_files/TypecountClientType2AdID182336FlightID110127TargetID8823Site.gif" border="0" height="1" width="1"> + + + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=microsite3&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_blank" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=110421&AdID=182683&TargetID=8825&Segments=3108,3448,4875,12456&Targets=2625,2878,8825&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4799,5163,6193,6293,6332,6392,6393,6422&RawValues=&Redirect=http://www.ddjresources.com/silverlight/">Are you a Windows programmer? Get the direct route to design interactive environments. Learn Silverlight here.</a><img src="makedepend_files/TypecountClientType2AdID182683FlightID110421TargetID8825Site.gif" border="0" height="1" width="1"> + + + </div> + </div> + <!-- END MICROSITES --></td> + <td valign="top"><!-- INFO LINK--> + <div id="ArticlerightcolBox"> +<span class="blogName">INFO-LINK</span> + <div class="Bspace5"> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=infolink1&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_blank" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=110048&AdID=182227&TargetID=4845&Segments=3108,3448,4875,6084,6088,6876,8025,8050,9374&Targets=2625,2878,4845,4855&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3183,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=&Redirect=http://www.ddj.com/focal/msoffice-oba">Learn how to build OBAs using the Microsoft Office system.</a><img src="makedepend_files/TypecountClientType2AdID182227FlightID110048TargetID4845Site.gif" border="0" height="1" width="1"> + + </div> + <div class="Bspace5"> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=infolink2&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_blank" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=110414&AdID=182665&TargetID=4921&Segments=3108,3448,4875,6085,6097,8026,8051&Targets=2625,2878,7437,4921&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3184,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=&Redirect=http://www.dobbsprojects.com/lcap/microsoft1/?method=text">Learn about the benefits of Protocol Licensing: Download this free Whitepaper from Microsoft</a><img src="makedepend_files/TypecountClientType2AdID182665FlightID110414TargetID4921Site.gif" border="0" height="1" width="1"> + + </div> + <div class="Bspace5"> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=infolink3&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_blank" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=112205&AdID=185099&TargetID=5776&Segments=3108,3448,4875,6089,8027,8052,8088&Targets=2625,2878,5776&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3185,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=&Redirect=http://w.on24.com/r.htm?e=102904&s=1&k=EE435A18D1C8A918764935B406A34FE9&partnerref=4SD">Register Today for Microsoft's Silverlight Webinar Series</a><img src="makedepend_files/TypecountClientType2AdID185099FlightID112205TargetID5776Site.gif" border="0" height="1" width="1"> + + </div> + <div class="Bspace5"> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=infolink4&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_blank" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=112620&AdID=185513&TargetID=5775&Segments=3108,3448,4875,6090,8028,8053,8089&Targets=2625,2878,5775&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3186,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=&Redirect=http://www.dobbsprojects.com/lcap/recursion2/?method=text">Free Whitepaper: Building a real-time C++ robotics framework using Recursion's C++ Toolkit. Download Now!</a><img src="makedepend_files/TypecountClientType2AdID185513FlightID112620TargetID5775Site.gif" border="0" height="1" width="1"> + + </div> +</div> + <br></td> + </tr> +</tbody></table> +<br> +<div align="center"> + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=sec2&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=107504&AdID=179387&TargetID=10444&Segments=3108,3448,4875,14374&Targets=2625,2878,10444&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3380,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.ddjresources.com/silverlight"><img src="makedepend_files/silverlight_center_imu2dec.gif" alt="" border="0" height="280" width="336"></a><img src="makedepend_files/TypecountClientType2AdID179387FlightID107504TargetID10444Sit.gif" border="0" height="1" width="1"> + + </div> + <br> + + + </td> + + <td valign="top"> + <!-- MICROSITES --> + <!-- <DIV id="ArticlerightcolBox">
+ <div id="TOCBAR"><span class="BARTitles">MICROSITES</span></div>
+ <DIV class="PaddingStyle2">
+ <span class="blogName">FEATURED TOPIC</span>
+ <droplet src="/viewAd.jhtml">
+ <param name="pagepos" value="microsite1">
+ </droplet>
+ <br /><br />
+ <span class="blogName">ADDITIONAL TOPICS</span>
+ <droplet src="/viewAd.jhtml">
+ <param name="pagepos" value="microsite2">
+ </droplet>
+ <droplet src="/viewAd.jhtml">
+ <param name="pagepos" value="microsite3">
+ </droplet>
+ </div>
+ </div> --> + <!-- END MICROSITES --> + <br> + + <!--
+<div align="center"><droplet src="/viewAd.jhtml">
+ <param name="pagepos" value="jumbobox">
+ </droplet></div>
+ <br> --> + <!-- <droplet src="/viewAd.jhtml">
+ <param name="pagepos" value="testdrive">
+ </droplet> --> + </td> + </tr> + <tr> + <td colspan="2"> + <!-- Industry Brains --> + <script type="text/javascript" src="makedepend_files/jsct.js"></script><table style="border: 1px solid rgb(197, 174, 80); width: 100%; background-color: rgb(255, 255, 255); border-collapse: collapse;" xmlns:ibn="urn:industrybrains.com:linkserver" cellspacing="0"><tbody><tr><td style="padding: 4px; font-family: Arial,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: bold; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 0, 0); text-align: left; background-color: rgb(249, 248, 247);" colspan="2"> MARKETPLACE (Sponsored Links) </td></tr><tr><td style="padding: 3px;"></td><td style="border: 0px solid rgb(24, 77, 49); padding: 3px;"><div><a style="font-family: Arial,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: bold; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; text-decoration: underline; color: rgb(64, 64, 255);" target="_new" href="http://links.industrybrains.com/click?sid=644&rqctid=134&pos=1&lid=458815&cid=101147&pr=2&tstamp=20080311173820&url=http://www.techexcel.com/products/servicesuite/servicewise.html%3futm_source%3dindustrybrains%26utm_medium%3dcpc%26utm_content%3dServiceWise%26utm_campaign%3dITILinfo">Workflow Enabled Help Desk & IT Service Management</a></div><div style="font-family: Verdana,Arial,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 0, 0);">Automate service desk activities and integrate processes across IT. Learn more here.</div></td></tr><tr><td style="padding: 3px;"></td><td style="border: 0px solid rgb(24, 77, 49); padding: 3px;"><div><a style="font-family: Arial,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: bold; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; text-decoration: underline; color: rgb(64, 64, 255);" target="_new" href="http://links.industrybrains.com/click?sid=644&rqctid=134&pos=2&lid=484014&cid=135265&pr=2&tstamp=20080311173820&url=http://clk.atdmt.com/MRT/go/ndstritp0450006421mrt/direct/01/">Download MICROSOFT SEARCH SERVER EXPRESS 2008 FREE</a></div><div style="font-family: Verdana,Arial,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 0, 0);">Search file shares, SharePoint sites, Exchange Public Folders, Lotus Notes repositories, and more!</div></td></tr><tr><td style="padding: 3px;"></td><td style="border: 0px solid rgb(24, 77, 49); padding: 3px;"><div><a style="font-family: Arial,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: bold; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; text-decoration: underline; color: rgb(64, 64, 255);" target="_new" href="http://links.industrybrains.com/click?sid=644&rqctid=134&pos=3&lid=458552&cid=108071&pr=2&tstamp=20080311173820&url=http://www.windev.com/index%3fp%3dCMPWinDev">WinDev 11 - Powerful IDE</a></div><div style="font-family: Verdana,Arial,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 0, 0);">Develop 10 times faster ! ALM, IDE, .Net, RAD, 5GL, Database, 5GL, 64-bit, etc. Free Express version</div></td></tr><tr><td style="padding: 3px;"></td><td style="border: 0px solid rgb(24, 77, 49); padding: 3px;"><div><a style="font-family: Arial,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: bold; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; text-decoration: underline; color: rgb(64, 64, 255);" target="_new" href="http://links.industrybrains.com/click?sid=644&rqctid=134&pos=4&lid=457884&cid=6237&pr=2&tstamp=20080311173820&url=http://www.sgvsarc.com/adv_default.asp%3fsrcid%3dAutoD">Flowcharts from C/C++ code -- Free trial download</a></div><div style="font-family: Verdana,Arial,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 0, 0);">Understand C/C++ code in less time. A new team member ? Inherited legacy code ? Get up to speed fast... </div></td></tr><tr><td style="padding: 3px;"></td><td style="border: 0px solid rgb(24, 77, 49); padding: 3px;"><div><a style="font-family: Arial,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: bold; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; text-decoration: underline; color: rgb(64, 64, 255);" target="_new" href="http://links.industrybrains.com/click?sid=644&rqctid=134&pos=5&lid=457902&cid=2193&pr=2&tstamp=20080311173820&url=http://www.visualbuild.com/%3fcmp">Automate Software Builds with Visual Build Pro</a></div><div style="font-family: Verdana,Arial,Helvetica,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 11px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 0, 0);">Easily create an automated, repeatable process for building and deploying software.</div></td></tr><tr><td style="padding: 0.2em; font-family: Arial,Helvetica,sans-serif; font-style: italic; font-variant: normal; font-weight: normal; font-size: 10px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 51, 102); text-align: right;" colspan="2"><a href="http://www.industrybrains.com/cmpsd" style="font-family: Verdana,Arial,Helvetica,sans-serif; font-style: italic; font-variant: normal; font-weight: normal; font-size: 10px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(0, 0, 170);"> Advertise With Us </a></td></tr></tbody></table><a href="http://shlinks.industrybrains.com/sh?sid=644&a=23abf02755a5877441daafff0e0a20d0006c03f08ff1275116277e26c0ce3851"></a> + <!-- end Industry Brains --> + </td> + </tr> + + </tbody></table> + + + + </td><td rowspan="2"> +</td><td rowspan="2" valign="top" width="10"> </td> + <td valign="top" width="165"> + <!-- DEPARTMENTS --> + + +<div id="DepartmentBOX"><div id="DepartmentBar"><span class="miniBARTitles">DEPARTMENTS</span></div> +<span class="deptLinks"> + +<div class="DeptLinkPad"><a href="http://www.ddj.com/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">Home</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + <div class="DeptLinkPad"><a href="http://www.ddj.com/architect/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">Architecture & Design</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + <div class="DeptLinkPad"><a href="http://www.ddj.com/cpp/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">C/C++</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + + <div class="DeptLinkPad"><a href="http://www.ddj.com/database/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">Database</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + <div class="DeptLinkPad"><a href="http://www.ddj.com/development-tools/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">Development Tools</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + <div class="DeptLinkPad"><a href="http://www.ddj.com/embedded/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">Embedded Systems</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + <div class="DeptLinkPad"><a href="http://www.ddj.com/hpc-high-performance-computing/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">High Performance Computing</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + <div class="DeptLinkPad"><a href="http://www.ddj.com/java/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">Java</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + + <div class="DeptLinkPad"><a href="http://www.ddj.com/mobile/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">Mobility</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + <div class="DeptLinkPad"><a href="http://www.ddj.com/linux-open-source/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">Open Source</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + + <div class="DeptLinkPad"><a href="http://www.ddj.com/security/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">Security</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + <div class="DeptLinkPad"><a href="http://www.ddj.com/web-development/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">Web Development</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + <div class="DeptLinkPad"><a href="http://www.ddj.com/windows/;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN?cid=vnav" class="deptLinks">Windows/.NET</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> +</span> +<!--<div id="EventBar"><span class="eventBARTitles"><a href="/events/" class="eventBARTitles">Events</a></span></div>--> +</div> + +<br> +<div id="DepartmentBOXSponsored"> +<div class="deptSponsorHeader">♦ sponsored</div></div> + <div id="DepartmentBOXSilverlight"> + <div class="DeptLinkPadSilverlight"><a href="http://www.ddjresources.com/silverlight/" class="deptLinksSilverlight">Resource Center for Microsoft® Silverlight™</a></div> + <div id="dividerLine"><img src="makedepend_files/blank.html" border="0" height="1" hspace="0" vspace="0" width="5"></div> + + <!-- <div id="EventBar"><span class="eventBARTitles"><a href="/dept/events/" class="eventBARTitles">Events</a></span></div> --> + </div> + + + <br> + <div width="161" height="601" hspace="0" vspace="0" border="0" align="center"> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=sky&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<script type="text/javascript"><!-- +google_ad_client = "pub-7860495301058581"; +google_ad_width = 120; +google_ad_height = 600; +google_ad_format = "120x600_as"; +google_ad_type = "text"; +//2007-05-30: SDMG_Sky +google_ad_channel = "4350521531"; +google_color_border = "FFFFFF"; +google_color_bg = "FFFFFF"; +google_color_link = "003399"; +google_color_text = "000000"; +google_color_url = "003399"; +//--> +</script> +<script type="text/javascript" src="makedepend_files/show_ads.js"> +</script><iframe name="google_ads_frame" src="makedepend_files/ads.html" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" frameborder="0" height="600" scrolling="no" width="120"></iframe><img src="makedepend_files/TypecountClientType2AdID185678FlightID110062TargetID2781Site.gif" border="0" height="1" width="1"> + + + </div> + <br> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=tile&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=97817&AdID=161784&TargetID=2780&Segments=3108,3250,3448,4875,5387,5471,5751&Targets=2625,2780,2878,4298&Values=34,46,51,63,77,87,91,102,140,205,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.ddj.com/newsletters/"><img src="makedepend_files/newsletter125x125.gif" alt="" border="0" height="125" width="125"></a><img src="makedepend_files/TypecountClientType2AdID161784FlightID97817TargetID2780SiteI.gif" border="0" height="1" width="1"> + + + </td> +</tr> +</tbody></table> +<!-- IMU AD--> + + + </td> + </tr> + </tbody></table> + +<img src="makedepend_files/rule.gif" alt="" align="left" border="0" height="1" hspace="5" vspace="10" width="900"> +<br clear="left"> +<!-- AD BANNER AT BOTTOM --> +<div id="BottomAdContainer"> + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=bottom&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=107499&AdID=178983&TargetID=1251&Segments=1551,3108,3317,3448,4875,5470,5750,5766,7712,7718,11862&Targets=1251,2625,2878,4879&Values=34,46,51,63,77,87,91,102,140,204,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.ddjresources.com/silverlight"><img src="makedepend_files/Silverlight_Cntr_Leadr3.jpg" alt="" border="0" height="90" width="728"></a><img src="makedepend_files/TypecountClientType2AdID178983FlightID107499TargetID1251Site.gif" border="0" height="1" width="1"> + + +</div> +<!-- /AD BANNER AT BOTTOM --> +<div class="LColMargin"> + <table class="elfixo" border="0" cellpadding="0" cellspacing="0" width="900"> + <tbody><tr> + <td valign="top" width="600"> + </td> + <td valign="top" width="300"> + + <!-- put Microsoft Resource Center box on article pages --> + + + + + <table border="0" cellpadding="1"><tbody><tr><td> + <!-- http://as.cmpnet.com/html.ng/affiliate=ddj&pagepos=mslink1&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=75640&AdID=125688&TargetID=2878&Segments=3108,3448,4875,7953&Targets=2625,2878&Values=34,46,51,63,77,87,91,102,140,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3556,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.cmp.com"><img src="makedepend_files/iopsblank.gif" alt="" border="0" height="1" width="1"></a><img src="makedepend_files/TypecountClientType2AdID125688FlightID75640TargetID2878SiteI.gif" border="0" height="1" width="1"> + + </td></tr></tbody></table> + + + + + + </td> + </tr> + </tbody></table> +</div> +<img src="makedepend_files/rule.gif" alt="" align="left" border="0" height="1" hspace="5" vspace="8" width="900"> +<br clear="left"> + +<!-- COPYRIGHT AND LINKS --> +<div id="COPYRIGHTContainer"> + <span class="tenBOLD"> + <div class="Bspace8"> + <!--<a href="http://www.sdmediagroup.com/reg/faq.html" class=nineBOLD>What are the <span class="green9">green links</span>?</a> |--> + <!-- The value for parameter category is the same as deptID. It has value when the blog pages are called. --> + + + + + + + + + + <a href="http://www.ddj.com/rss/openSource.xml;jsessionid=4CBKBE5CTME2YQSNDLOSKH0CJUNN2JVN"> <img src="makedepend_files/rss.jpg" align="absbottom" border="0" hspace="3" vspace="0"></a> | + <!-- <a href="/sitemap/" class="tenBOLD">Site map</a> --> + </div> + </span> <span class="tenBOLD"> + <div class="Bspace8"> + <a href="http://www.think-services.com/" target="new" class="tenBOLD">© 2008 Think Services</a>, + <a href="http://www.unitedbusinessmedia.com/ubm/sitetools/privacy/" class="tenBOLD">Privacy Policy</a>, + <a href="http://www.cmp.com/delivery/privacy.html#california" class="tenBOLD">Your California Privacy Rights</a>, + <a href="http://www.unitedbusinessmedia.com/ubm/sitetools/disclaimer/" class="tenBOLD">Terms of Service</a>, + <a href="http://www.unitedbusinessmedia.com/" class="tenBOLD">United Business Media</a> <br> + Comments about the web site: <a href="mailto:webmaster@ddj.com" class="tenBOLD">webmaster@ddj.com</a> + </div> + Related Sites: + <a href="http://www.dotnetjunkies.com/" target="_blank" class="tenBOLD">DotNetJunkies</a>, + <a href="http://www.sdexpo.com/" target="_blank" class="tenBOLD">SD Expo</a>, + <a href="http://www.sqljunkies.com/" target="_blank" class="tenBOLD">SqlJunkies</a></span> +</div> +<!-- /COPYRIGHT AND LINKS --> + + + + + <!-- http://as.cmpnet.com/html.ng/pagepos=toptile&affiliate=ddj&site=sdmg&country=switzerland&server=atg&target=/linux-open-source/184406479 --> +<a target="_parent" href="http://as.cmpnet.com/event.ng/Type=click&FlightID=75634&AdID=125682&TargetID=2625&Segments=3108,3448,4875,7725,8024,8049,8892,8904&Targets=2625,2878,5537&Values=34,46,51,63,77,87,91,102,140,265,442,656,944,945,975,1311,1603,1716,1765,1767,1785,1925,1970,2179,2299,2310,2326,2352,2678,2735,2761,2767,2862,2942,3052,3082,3392,3890,3904,4080,4799,6193,6293,6332,6392,6393,6422&RawValues=IP,66.77.24.210,&Redirect=http://www.cmp.com"><img src="makedepend_files/iopsblank.gif" alt="" border="0" height="1" width="1"></a><img src="makedepend_files/TypecountClientType2AdID125682FlightID75634TargetID2625SiteI.gif" border="0" height="1" width="1"> + + +<!-- start Vibrant Media IntelliTXT script section --> +<script type="text/javascript" src="makedepend_files/ddj_edit.js"></script><script language="javascript" type="text/javascript" src="makedepend_files/front.js"></script> +<!-- end Vibrant Media IntelliTXT script section --> +</body></html>
\ No newline at end of file |