物聯(lián)網(wǎng)智能追溯實訓系統(tǒng)基礎(chǔ)教程_第1頁
物聯(lián)網(wǎng)智能追溯實訓系統(tǒng)基礎(chǔ)教程_第2頁
物聯(lián)網(wǎng)智能追溯實訓系統(tǒng)基礎(chǔ)教程_第3頁
物聯(lián)網(wǎng)智能追溯實訓系統(tǒng)基礎(chǔ)教程_第4頁
物聯(lián)網(wǎng)智能追溯實訓系統(tǒng)基礎(chǔ)教程_第5頁
已閱讀5頁,還剩91頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

實訓系統(tǒng)(食品安全)程物聯(lián)網(wǎng)智能追溯實訓系統(tǒng)(食品安全2012-07-第1章.Net應用開發(fā)基礎(chǔ)....................................................................................... 第2章Java應用開發(fā)基礎(chǔ)....................................................................................準備工 開始編 運行結(jié) 第3章Android應用開發(fā)基礎(chǔ)..............................................................................Android應用程序的開 Acitivy初 基本控件的使 Activity的布 多線 第5章嵌入式單片機開發(fā)基礎(chǔ).............................................................................概 硬件設(shè) 軟件開發(fā)環(huán) 開發(fā)平臺的建 第6章嵌入式Linux開發(fā)基礎(chǔ).............................................................................概 關(guān)于程序的編譯和....................................................................................Makefile介 電子秤makefile文 第1.Net如何創(chuàng)建一個簡單的C#Visualstudio20081.1.1在“名稱”中輸入“oWorldProject..51.1.7 .12息,則說明本已被成功完成,如圖1.1.13所示。第2JavaPC()、串口連接線、WindowXP系統(tǒng)、Eclipse或MyEclipse(本使用它)、正確安裝JDK1.6及JRE6。m20-win32解 m20-win32得 .dll為配置文 .dll覆蓋入JDK安 \bin和 perties覆蓋入JDK安 \libJDK安 \jre\lib安 \將comm.jar覆蓋入JDK安裝 \lib、JDK安裝 \jre\lib\ext、JRE安裝目錄\lib、JRE安裝 打開MyEclipse建立javaProject項目(如果使用MyEclipseJDKcomm.jarJDK1.6.由于之前的配JRESystemLibrary可以看到串口信package importjava.awt.*;importjava.awt.event.*;importjava.io.*;import classR_FrameextendsFrameimplementsRunnable,ActionListener,SerialPortEventListener{/*staticCommPortIdentifier/*Enumeration為枚舉型類,在java.util*/staticEnumerationportList;InputStreaminputStream;/*RS-232串行端口的成員變量*/SerialPortserialPort;ThreadreadThread;Stringstr="";TextFieldout_messagenewTextField("上面文本框顯示接收到的數(shù)據(jù)TextAreain_message=newTextArea();ButtonbtnOpennewButton("打開串口");/**/R_Frame(){setSize(200,200);add(out_message,"South");add(in_message,"Center");add(btnOpen,"North");}//R_Frame()/*點擊按扭所觸發(fā)的事件:打開串口,并串口.publicvoidactionPerformed(ActionEventevent)/*portList=/*while(portList.hasMoreElements())/*portId=(CommPortIdentifier)portList.nexif(portId.getPortType()==CommPortIdentifier.PORT_SERIAL){if(portId.getName().equals("COM1"))tryCOM1",

serialPort=(SerialPort)portId.open("out_message.setText("已打開端口COM1正在接收數(shù)}catch(PortInUseExceptione)}/*設(shè)置串口器try}catch(TooManyListenersExceptione)}/*偵聽到串口有數(shù)據(jù),觸發(fā)串口事件*/}//if}//if}//whilereadThread=newThread(this);readThread.start()線程負責每接收一次數(shù)據(jù)休眠20秒鐘}//actionPerformed()/*接收數(shù)據(jù)后休眠20publicvoidrun()try}catch(InterruptedExceptione)}}//run()/*串口器觸發(fā)的事件,設(shè)置串口通訊參數(shù),數(shù)據(jù)并寫到文本區(qū)中publicvoidserialEvent(SerialPortEventevent)/*try{}catch mOperationExceptione)byte[]readBuffer=newbyte[20];try{inputStream=}catch(IOExceptione)try/*從線數(shù)據(jù)流while(inputStream.available()>0)intnumBytes=}//whileendstr=newString(readBuffer);/*接收到的數(shù)據(jù)存放到文本區(qū)中*/}catch(IOExceptione){}//serialEvent()類R_Frame信息主方packageimportjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;public mpublicstaticvoidmain(Stringargs[])/*實例化接收串口數(shù)據(jù)的窗體類*/R_FrameR_winnew/*定義窗體適配器的關(guān)閉按鈕功能*/R_win.addWindowListener(newWindowAdapter()publicvoidwindowClosing(WindowEvente){}}}package程序文件名稱 COM1importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava.util.*; classS_FrameextendsFrameimplementsRunnable,{/*檢測系統(tǒng)中可用的通訊端口類*/staticCommPortIdentifier/*Enumeration為枚舉型類,在util中*/staticEnumerationportList;OutputStreamoutputStream;/*RS-232的串行口*/SerialPortserialPort;ThreadreadThread;Panelp=nenel();TextFieldin_message=newTextField("COM1,8,TextAreaout_message=newButtonbtnOpen=newButton("打開串口,發(fā)送數(shù)據(jù)");ButtonbtnClosenewButton("關(guān)閉串口,停止發(fā)送數(shù)據(jù)");bytedata[]=new/*設(shè)置判斷要是否關(guān)閉串口的標志*/booleanmark;/*安排窗體*/S_Frame(){setSize(200,200);add(out_message,"Center");add(p,"North");add(in_message,"South");}//R_Frame()/*點擊按扭打開串口.publicvoidactionPerformed(ActionEventevent){if(event.getSource()==btnClose){serialPort.close();//關(guān)閉串口mark=true;//用于中止線程的run()方法}elsemark=/*從文本區(qū)按字節(jié)數(shù)據(jù)data=/*打開串口*/in_message.setText("串口COM1已經(jīng)打開,正在每2秒鐘發(fā)送 }}//actionPerformed()/*打開串口,并調(diào)用線程發(fā)送數(shù)據(jù)*/publicvoidstart(){/*獲取系統(tǒng)中所有的通訊端口portList=/*用循環(huán)結(jié)構(gòu)找出串口while(portList.hasMoreElements())/*強制轉(zhuǎn)換為通訊端口類型portId=(CommPortIdentifier)portList.nex CommPortIdentifier.PORT_SERIAL){if(portId.getName().equals("COM1"))/*打開串口*/try{serialPort=(SerialPort)

}catch(PortInUseExceptione)}/*設(shè)置串口輸出流*/try{outputStream=}catch(IOExceptione)}}//if}//if}//while/*調(diào)用線程發(fā)送數(shù)據(jù)*/try{readThread=new2}catch(Exceptione)}}//start()/*發(fā)送數(shù)據(jù),休眠2秒鐘后重發(fā)*/publicvoidrun(){/*設(shè)置串口通訊參數(shù)*/try{}catch mOperationExceptione)}/*data[]*/try{}catch(IOExceptione)}/*發(fā)送數(shù)據(jù)后休眠2秒鐘,然后再重發(fā)*/try{if(mark){return;//結(jié)束run}}catch(InterruptedExceptione)}}//run()}//類S_Frame寫入串口信息主packageimportjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;public mpublicstaticvoidmain(Stringargs[])S_FrameS_win=newS_Frame();S_win.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){}}}2.3.1串口信息運行2.3.2第3AndroidAndroid1Android3androidApplicationProject應用程序的名應用程序的名 兼容最低的 點擊Next進入下一步,如下5(可跳過)點擊Next下一步如下圖:6Activity界面的樣式(一般默認)點擊Next下一步如下圖:7、點擊Finish按鈕,就能新建一 oWorld的應用程序,如下圖Android應用程序 詳src中存放的是該項目的源代碼,其結(jié)構(gòu)會根據(jù)用戶所的包自動組織,該的組織方式為src/aaa/bbb/oWord.java,其中aaa/bbb為包名軟件開發(fā)在項目開發(fā)過,大部分時間是對該下的源代碼文 下的文件全部都是ADT自動生成的,一般并不需要去修改,其R.java文件,該文件相當于項目的字典,為項目中用戶界面、字符串、資源都會在該類中創(chuàng)建其惟一的ID,當項目中使用這些資源時,會通過該得到資源的 中存放的是該項目支持的jar包,同時其中還包含項目打包時需要 該用于存放項目相關(guān)的資源文件,例如文本文件等,在程序中可以使getResources.getAssets().open("text.txt")”得到資源文件的輸入流InputStream對象。5res(不支持深度子Invalidfilenamemustcontainonlya-z0-9_.]文件命名方式只能是[a-z0-9_.]中的,否則報錯,R.java不會自動生成該用于存放應用程序中經(jīng)常使用的資源文件,其中包括、聲音、布局文件以及參數(shù)描述文件等,其中包括多個,其中以drawable開頭的三個文件夾用于.png、.9.png、.jpg等資(.9.png是Android特有的格式,可以根據(jù)情況進行拉伸,達到不變形的效,layout等資源,values存放的則是所有xml格式的資源描述文件,例如字符串資源的描述文件strings.xmlstyles.xmlcolors.xmldimens.xml尺寸描述文件以及數(shù)組描述文件arrays.xml存放的則是菜單的資源表述文件如.xml等。Activity、Service等進行,同時還對程序的版本進行說明7pertiesAcitivy初步Activity1Activity是可見的,用戶和Android應用程序之間進行交互就是通過2ActivityActivity建Activity的要點:1、一個Activity就是一個類,并且這個類要繼承Activity類2、需要重寫onCreate方法。onCreate方法是在Activity第一次運行時會被調(diào)3、每一個Activity都需要在AndroidManifest.xml文件中進行配置 Activity3.2.3在Android Activity3.2.3在AndroidManifest.xml文件當Activity中如果配置應用程序的圖應用程序的標Activity的標了Activity的類一個程序一般由多個Activity組成。必須有一個activity被指定為主activity,它是程序啟動時首先顯示的界面。上圖只加入一個Activity作為例子。Activity1、reslayout,里面有個main.xmlActivityActivity個布局文件,或者幾個Activity這個是布局 ut這個是線

2、要想添加控件,先打開main.xml文件,在布局的

件的ID。設(shè)置完IDButton控件的ID。設(shè)置完ActivityActivityActivity應用戶操作的Activity。Activity仍然對用戶可見,并且是存活狀態(tài)(它保留著所有的狀態(tài)和成員信息并保持和窗口管理器的連接。如果系統(tǒng)處于內(nèi)存不足時會殺死這個Activity。Activity則系統(tǒng)經(jīng)常會殺死這個Activity。當ActivityvoidonCreate(BundlesavedInstanceState)voidonStart()voidonRestart()voidonResume()voidonPause()voidonStop()voidonDestroy()ActivityonCreate(onDestroy()ActivityonCreateonDestroy()它會在onCreate()創(chuàng)建線程,而在onDestroy()銷毀線程。Activity的可視生命周期自onStart()調(diào)用開始直到相應的onStop()調(diào)用結(jié)束。在此期間,用戶可以在屏幕上看到Activity,盡管它也許并不是位于前臺或者也不與需的資源。例如,當用戶不再看見我們顯示的內(nèi)容時,我們可以在onStart()中一個BroadcastReceiver來會影響UI的變化,而在onStop()中來注消。onStart()和onStop()方法可以隨著應用程序是否為用戶可見而被多次調(diào)用。Activity的前臺生命周期自onResume()調(diào)用起,至相應的onPause()調(diào)用為止。在此期間,Activity位于前臺最上面并與用戶進行交互。Activity會經(jīng)常在暫停和恢復之間進行狀態(tài)轉(zhuǎn)換——例如當設(shè)備轉(zhuǎn)入休眠狀態(tài)或者有新的Activity啟動時,將調(diào)用onPause()方法。當Activity獲得結(jié)果或者接收到新的Intent時會調(diào)用onResume()方法。IntentIntent是一個將要執(zhí)行的動作的抽象描述,一般來說是作為參數(shù)來使用,由IntentandroidstartActivity()來啟動一個activity,或者由broadcaseIntent()來傳遞給所有感的BroadcaseReceiver,再或者由startService()/bindservice()來啟動一個的service.所以可以看出來,intent主要是用來啟動其他的activity或者service,所以可以將intent理解成activity之間的粘合劑。通通過第一的Intent、ACTION_VIEW,ACTION_PICKactivity"com.example.poject.SHOW_OR”、Uri某聯(lián)系人的URI可能為:content://contacts/1。(MIME4Category(類別例如LAUNCHER_CATEGORY表示Intent的接受者應該在Launcher中作為頂AndroidActivity(單獨啟動時候,第一個運行的那個Activit...,都需要一個Category為CATEGORY_LAUNCHER,Action為ACTION_MAIN的Intent。5Component(組件Intent通常Android會根據(jù)Intentactiondata/type、了這個屬性以后,Intent的其它所有屬性都是可選的。6、Extras(附加信息作,可以將電子郵件的標題、正文等保存在extras里,傳給電子郵件發(fā)送組件。ActivityActivity1、一個,通過某個組件的動作去處理啟動另外一個Activity的方2、在的方法中,通過以下的代碼來處理啟動另外一個Activity的方法,如下ButtonButton的使用方法是一個菜單控件CheckBoxRadioButtonRadioButtonSpinnerSpinnerDatePickerTimePicker詳細請參 事例LinearLayout線性版面配置,在這個中,所有元件都是按由上到下的排隊排成的LinearLayout表示在這個布局文LinearLayout表示在這個布局文 ayout向右移動時,坐標值將變大。Absoluayout沒有頁邊框,允許元間互相重疊(盡管不推薦。我們通常不推薦使用Absoluayout,除非你有正當理由要使ayout表示在這個布局RelativeLayout布局(通過ID指定。因此如果第一個元素在屏幕的,那么相對于這個元素的其它元素將以屏幕的相對位置來排列。如果使用XML來指定這個layout,在你這個布局文FrameLayout布局最簡單的一個布局對象。是一個框架布局樣式,可以用include載入定義的另layoutFrameLayout中的一個子元素指定一個位置后一個子元素將會直接一個子元上進行覆詳細請參 事例解釋:當應用程序啟動時,Android首先會開啟一個主線程(也就是UI線程),主線管理界面中的UI控件,進行事件分發(fā),比如說,你要是點擊一個Button,Android會分發(fā)事件到Button上,來響應你的操作。 個耗時的操作,例如:聯(lián)網(wǎng)數(shù)據(jù), 如果5秒鐘還沒有完成的話會收到Android系統(tǒng)的一個錯誤提示 這個時候我們需要把這些耗時的操作,放在一個子線,因為子線程涉及到UI更,Android子線操作是的.這個時候,Handler就出現(xiàn)了.,來解決這個復雜的問題,由于Handler運行在主線(UI線), 它與子線程可以通過Message對象來傳遞數(shù)據(jù),這個時候,Handler就承擔著接受子線程傳過來的(子線程用sendMessage()方法傳弟)Message對象,(里面包含數(shù)據(jù)) ,把這些消息放入主線程隊列中,配合主線程進行更新UI。Message:消息,其中包含了消息ID,消息處理對象以及處理的數(shù)據(jù)等,由MessageQueueHandlerHandler:處理者,負責Message的發(fā)送及處理。使用Handler時,需要實現(xiàn)handleMessage(Messagemsg)方法來對特定的Message進行處理,例如更新UI等。式串聯(lián)起來的,等待Looper的抽取。LooperMessageQueueMessageMessageQueueLooperAsynAndoid的Asyk比adler更輕量級一些,適用于簡單的異步處理。首先明確Andoid之所以有ar和Asyk都是了不阻塞主線(I線程,且I的更新只能在主線完成,因此異步處理是不可避免的。Asynk直接繼承于Object類,位置為android.os.Asynk。要使用Asynk工作我們要提供三個泛型參數(shù),并重載幾個方法(至少重載一個)。Asynk定義了三種泛型類型Params,Progress和Result。ParamsHTTPURLProgress:任務執(zhí)行的百分比Result:執(zhí)行任務最終返回的結(jié)果,比如String。nBackground(Params…)執(zhí)行,比較耗時的操作都可以放在這里。注意這里不能直接操作UI。此方法在線程執(zhí)行,完成任務的主要工作,通常需要較長的時間。在執(zhí)行過可以調(diào)用publicProgress(Progress…)onPostExecute(Result)相當于HandlerUI用在nBackground得到的結(jié)果處理操作UI。此方法在主線程執(zhí)行任 Excute 詳細請參 事例第5CC2530單片機開發(fā)的最基礎(chǔ),主要內(nèi)容IAR硬件設(shè)設(shè)備 仿真CC2530硬USBPC軟件開發(fā)環(huán)開發(fā)CC2530應用系統(tǒng)一般需要以下幾個完成軟件:SmartRFFlashProgrammer程序編制、、編譯、調(diào)試環(huán)境,能將匯編語言和C語言程序編譯成HEX可執(zhí)行輸出文件,并能將程序到目標CC2530上運行調(diào)試。源程序文件:C語言或匯編語言文(*.C-頭文件-庫文件Workbenchfor8051->IAREmbeddedWordbench。使用IAR點擊Project菜單,選擇GreateNewProject...,彈出如下圖框在Toolchain下拉欄中選擇8051,點擊“OK”按鈕,彈出下圖框,在“文系統(tǒng)產(chǎn)生兩個創(chuàng)建配置:調(diào)試和發(fā)布。這里使用Debug,項目名稱后的星號指示修改還沒有保存。選擇菜單File\Save\Workspace,給工作區(qū)命名如“APP0”,選擇菜單Project\AddFile菜單中選擇AddFile,彈出“AddFiles”選擇需要的文件點擊“打開”命令按鈕。如沒有建好的程序文件也可點擊 ”或選擇菜單File-〉New-〉File新建一個空文本,向文件 能:CC2530基礎(chǔ)實驗---點亮LED實*硬件連接:led:p1.0,p1.1p1.3, 者 /*包含頭文件#include //頭文led:p1.0,p1.1,p1.3,p1.4:#defineLED1P1_0函數(shù)名稱 能:軟件延參數(shù):unsignedinttime返回值:無voiddelay(unsignedint{unsignedinti;unsignedcharj;for(i=0;i<time;{for(j=0;j<240;{}}}函數(shù)名稱 能:main函返回值:無void{P1SEL&=~(0x01 //設(shè)置P1.0IOP1DIR|0x01 //設(shè)置為輸出{LED1LED1=1;}}選擇菜單File->Save彈出保存框,文件名取“testpro.c”保存到新建的工選擇Project菜單下的Options...配置與CC2530相關(guān)的選項。General:按下圖配置,選擇Codemodel和Datamodel,以及其它參數(shù)。點擊Derivativeinformation欄右邊的按鈕,選擇程序安裝位置,\IAR下的文件CC2530F256.i51。DataPointer:選擇數(shù)據(jù)指針數(shù)1個,16位linker連接器OutputExtraOutputConfigLinkercommandfileDebugger調(diào)試器Setup:在DeviceDescriptionfile選擇CC2530.ddf文件,其位置config\devices\TexasInstruments\CC2530.ddf。單設(shè)置,關(guān)于其復雜設(shè)置和詳細說明請參考:IAR開發(fā)環(huán)境中的Help菜單->IAREmbeddedWorkbenchUserGuide。選擇菜單Project\RebuildAll或快捷按鈕對工程進行編譯選擇菜單Project\Debug或按快捷鍵CTRL+D進入調(diào)試狀態(tài),也可按工具在IAREmbeddedWorkbench中用戶可以在特定的位置停靠窗口,并利用IARHelp>IAREmbeddedWorkbenchUserGuideStepInto執(zhí)行函數(shù)或子進程的調(diào)StepOver每步執(zhí)行一個函數(shù)調(diào)用StepOut跳出函數(shù)或子程序的調(diào)Nextstatement每次執(zhí)行一個語句選擇View菜單->Watch,彈出圖示“觀察窗口”,可以在Expression欄顯示數(shù)據(jù)類型。如果要在Watch窗口中去掉一個變量,先選中,再點右鍵3.8觀察窗口ToggleBreakpointX3.9所示。可以結(jié)合觀察窗口觀察變量或寄存器的變化。如要取消斷點,在原來斷點的設(shè)置處再執(zhí)行一次ToggleBreakpoint命令即可。3.9擇菜單View\Disassembly3.10,用戶可看到當前C語

3.10寄存器窗口允許用戶并修改寄存器的內(nèi)容。選擇菜單View\Regisster,3.113.11觀察寄存器的值選擇菜單View\Memory,打開器窗口。在調(diào)試狀態(tài)下選擇j,將它從源代碼窗口拖到器窗口中。此時器窗口中對應的值也被選中,如圖3.12所示。用戶可以在器窗口中對數(shù)據(jù)進行編輯,修改,在想進行編輯的器數(shù)值處放

圖3.12觀察器的選擇菜單Debug\Go或點擊調(diào)試上的按 進入全速運選擇菜單Debug\StopDebugging或點擊調(diào)試 第6Linux什么是makefile?或許很多Winodws的程序員都不知道這個東西,因為那些Windows的IDE都為你做了這個工作,但我覺得要作一個好的和professional的程序員,makefile還是要懂。這就好像現(xiàn)在有這么多的HTML的編輯器,但如果你想成為一個專業(yè),你還是要了解HTML的標識的含義。特別在Unix下的軟件編譯,你就不能不自己寫makefile了,會不會寫makefile,從一個側(cè)面說明了一個人是否具備完成大型工程的能力。因為,makefile關(guān)系到了整個工程的編譯 哪些文件需要重新編譯,甚至于進行更復雜的功能操作,因為makefile就像一個 一樣,其中也可以執(zhí)行操作系統(tǒng)令。makefile帶來的好處就是極大的提高了軟件開發(fā)的效率。makemakefile令令工具,一般來說,大多數(shù)的IDE都有這個命令,比如:Delphi的make,VisualC++nmake,LinuxGNUmake??梢?,makefile在這篇文檔中,將以C/C++的源碼作為我們基礎(chǔ),所以必然涉及一些關(guān)于這里所默認的編譯器是UNIX下的GCC和CC。,在此多說關(guān)于程序編譯的一些規(guī)范和方法,一般來說,無論是C、C++、還是pas,首先要把源文件編譯成中間代碼文件,在Windows下也就是.obj文件,UNIX下是.o文件,即ObjectFile,這個動作叫做編譯(compile。然后再把大量的ObjectFile合成執(zhí)行文件,這個動作叫作(link。編譯時,編譯編譯器頭文件的所在位(頭文件中應該只是而定義應該放在C/C++文件中都應該對應于一個中間目標文件(O文件或是OBJ文件。時,主要是函數(shù)和全局變量,所以,我們可以使用這些中間目標文件(O文件或是OBJ文件)來,我們的應用程序。器并不管函數(shù)所在的源文件,函數(shù)的中間目標文File是.lib文件,在UNIX下,是ArchiveFile,也就是.a文件。在編譯時編譯器只檢測程序語法和函數(shù)變量是否被如果函數(shù)未被Error到函數(shù)的實現(xiàn)。你需要指定函數(shù)的ObjectFile.Makefile介紹make命令執(zhí)行時,需要一個Makefile文件,以告訴make命令需要怎么樣efe這個示例來源于GNU的mae使用手冊,在這個示例中,我們的工程有8個C文件,和個頭文件我們要寫一個efe來告訴mae命如何編譯和這幾個文件。我們的規(guī)則是:如果這個工程沒有編譯過,那么我們的所有C文件都要編譯并被C文件,并目標程序以完成,makeMakefileMakefile...:prerequisites...也就是一個目標文件,可以是ObjectFile,command也就是make需要執(zhí)行令(任意的S命令)這是一個文件的依賴關(guān)系,也就是說,這一個或多個的目標文件依賴于prerequisites中的文件,其生成規(guī)則定義在command中。說白一點就是說,prerequisites中如果有一個以上的文件比文件要新的話,command所定38C前面所述的那三個規(guī)則,我們的Makefile應該是下面的這個樣子的。edit:main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.occ-oeditmain.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.omain.o:main.cdefs.hcc-cmain.ckbd.o:kbd.cdefs.hcommand.hcc-ckbd.ccommand.o:command.cdefs.hcommand.hcc-ccommand.cdisplay.o:display.cdefs.hbuffer.hcc-cdisplay.cinsert.o:insert.cdefs.hbuffer.hcc-cinsert.csearch.o:search.cdefs.hbuffer.hcc-csearch.cfiles.o:files.cdefs.hbuffer.hcc-cutils.o:utils.cdefs.hcc-cutils.ccleanrmeditmain.okbd.ocommand.odisplay.oinsert.osearch.ofiles.o反斜杠(\)Makefile容保存在文件為“Makefile”或“makefile”的文件中,然后在該下直接輸入命令“make”就可以生成執(zhí)行文件edit。如果要刪除執(zhí)行文件和所有的中間目標文件,那么,只要簡單地執(zhí)行一下“makeclean”就可以了。(*.o個.o文件都有一組依賴文件,而這些.o文件又是執(zhí)行文件edit的依賴文件。一定要以一個Tab鍵作為開頭。記住,make并不管命令是怎么工作的,他執(zhí)行所定義令。make會比較s文件和prerequisites文件的修改日期,如果prerequisites文件的日期要比s文件的日期要新,或者不存在的話,那么,make就會執(zhí)行后續(xù)定義令。這里要說明一點的是,clean不是一個文件,它只不過是一個動作名字,有點Clable,makemake命令后明顯得這個lable的名字。這樣的方法非常有用,我們可以在一個makefile中定義不用的編譯或是和編譯無關(guān)令,比如程序的打包,程序的make ,3、如果edit文件不存在,或是edit所依賴的后面的.o文件的文件修改時間要4、如果edit所依賴的.o文件也存在,那么mae會在當前文件中找目標為.o文文件(這有點像一個堆棧的過程CHmaeo用.o文件生命makeedit這就是整個make的依賴性,make會一層又一層地去找文件的依賴關(guān)系,直的文件找不到,那么make就會直接退出,并報錯,而對于所定義令的錯誤,或是編譯不成功,make根本不理。make文件的依賴性,即,如果在我找了通過上述分析,我們知道,像clean這種,沒有被第一個目標文件直接或間接關(guān)聯(lián),那么它后面所定義令將不會被自動執(zhí)行,不過,我們可以顯示要make執(zhí)行。即命令——“makeclean”,以此來清除所有的目標文件,以便重編譯。這個依性關(guān)系后面所定義令于是file.o的文件也是的啦,于是file.o的文件修改時間要比edit要新,所以edit也會被重新了(詳見edit目標文件后而如果我們改變了“command.h”,那么,、mand.ofiles.o會被重編譯,并且,edit會被重。makefileeditedit:main.okbd.ocommand.odisplay.o\inse

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論