W01-1-命令行與多文件-525207871_第1頁
W01-1-命令行與多文件-525207871_第2頁
W01-1-命令行與多文件-525207871_第3頁
W01-1-命令行與多文件-525207871_第4頁
W01-1-命令行與多文件-525207871_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基本編程技能使用程序主函數的命令行參數多個源文件程序的編譯與鏈接編寫Make工具的腳本程序1先看一個示例:下列程序的功能是什么?//ex1.cpp@20090831#include<iostream>intmain(){ inta,b; std::cin>>a>>b; std::cout<<a+b<<std::endl; return0;}[現場演示]編譯、運行、總結程序命令行參數2EX1.EXE的特點:加法的兩個操作數在程序運行時輸入在被“問到”時才輸入屬于“強制交互”能否有其他的人機交互方式?程序命令行參數3main(intargc,char**argv)?請看下面的例子//ex2.cpp@20090831#include<iostream> #include<cstdio> //atoi()intmain(intargc,char**argv){ inta,b;// std::cin>>a>>b; a=atoi(argv[1]); b=atoi(argv[2]); std::cout<<a+b<<std::endl; return0;}4命令行參數。通過argc,argv傳入5main(intargc,char**argv)?//ex2.cpp@20090831#include<iostream> #include<cstdio> //atoi()intmain(intargc,char**argv){ inta,b;// std::cin>>a>>b; a=atoi(argv[1]); b=atoi(argv[2]); std::cout<<a+b<<std::endl; return0;}EX2.EXE453argc“4”“5”“EX2.EXE”argvargv[0]argv[1]argv[2]char**int6例1:dir*.exe*.cpp*.obj/b例2:cl–GXex2.cpp–oABC.exe例3:g++ex01.cpplog.cpp想一想上述三個例子中,源程序中的argc與argv分別是什么?7IDE中調試時如何輸入命令行參數?8main(intargc,char**argv)?9main(intargc,char**argv)?10多個源文件的編譯與鏈接11先來看一個示例程序源代碼行號2084!12多個源文件的編譯與鏈接EX4.cpppart1.cpppart2.cpppart3.cppEX4.EXEEX4.EXE13多個源文件的編譯與鏈接//ex5.cpp@20090831#include<iostream> #include<cstdio> //atoi()intADD(inta,intb){returna+b;}intmain(intargc,char**argv){ if(argc!=3){ std::cout<<"Usage:"<<argv[0]<<"op1op2"<<std::endl; return1; } inta,b; a=atoi(argv[1]); b=atoi(argv[2]); std::cout<<ADD(a,b)<<std::endl;

return0;}14多個源文件的編譯與鏈接15多個源文件的編譯與鏈接16多個源文件的編譯與鏈接17多個源文件的編譯與鏈接函數聲明ex5.cpp

func.h,func.cpp ex5_main.cpp18多個源文件的編譯與鏈接//func.hintADD(inta,intb);//func.cpp#include"func.h"intADD(inta,intb){returna+b;}//ex5_main.cpp@20090831#include<iostream> #include<cstdio> //atoi()#include"func.h" //ADD()intmain(intargc,char**argv){ if(argc!=3){ std::cout<<"Usage:"<<argv[0] <<"op1op2"<<std::endl; return1; } inta,b; a=atoi(argv[1]); b=atoi(argv[2]); std::cout<<ADD(a,b)<<std::endl; return0;}19練一練//func.hintADD(inta,intb);//func.cpp#include"func.h"intADD(inta,intb){returna+b;}//ex5_main.cpp@20090831#include<iostream> #include<cstdio> //atoi()#include"func.h" //ADD()intmain(intargc,char**argv){ if(argc!=3){ std::cout<<"Usage:"<<argv[0] <<"op1op2"<<std::endl; return1; } inta,b; a=atoi(argv[1]); b=atoi(argv[2]); std::cout<<ADD(a,b)<<std::endl; return0;}在命令行窗口中如何編譯鏈接它們?在VC-IDE中如何編譯鏈接它們?20MAKE工具與Makefile文件21MAKE是個什么工具?使得大型編譯工作自動化的一種工具減少編譯程序花費的時間確保使用正確的選項進行編譯確保鏈接正確的程序模塊、程序庫事實上,根據MAKE的機制,還可以簡化任務的重復執(zhí)行過程減少說明文檔的編寫工作量其它創(chuàng)新性的想法2223百聞不如一見:來個例子吧#XuMingxing@20070525#C++CourseforTHU2006#all:main.exetest.exemain.exe:main.cppstudent.cpp

g++-omain.exemain.cppstudent.cpptest.exe:student.cppstudent_test.cpp

g++-otest.exestudent_test.cppstudent.cppclean:

del*.obj*.exe注釋以#開頭冒號前為“任務”名完成“任務”的步驟(過程)冒號后為“任務”的“條件”24來個復雜點的吧…#YoucanuseNMAKE.exe(MS)orMAKE.exe(GNU)torunthisfile.#ThereisaverybigdifferencebetweenGNU-MakeandMS-NMake,ALL:SpkVRF.dllWaveTest_win32.exeLiveTest_win32.exedll_tester.exeLiveTest_win32.exe:LiveTest_win32.cppaudio_win32.cppDLLUtil.cpp cl/nologoLiveTest_win32.cppaudio_win32.cppDllUtil.cpp#onlyoff-linetest(testwavefiles)WaveTest_win32.exe:WaveTest_win32.objWFile.objCComBuf.objDLLUtil.obj link/nologo/NODEFAULTLIB:LIBC/out:WaveTest_win32.exeWaveTest_win32.objWFile.objCComBuf.objDLLUtil.objdll_tester.exe:dll_tester.objwfile.objccombuf.objdllutil.obj link/nologo/NODEFAULTLIB:LIBC/out:dll_tester.exedll_tester.objwfile.objccombuf.objdllutil.obj編寫Makefile的基本方法不怕學習技術(值得學習與掌握的技術)不怕付出勞動(絕對不會降低工作效率)從一個例子入手列出源程序清單(可使用dir/b

命令)搞清楚幾個最基本的編譯器參數選項g++-o:指定生成的EXE名字g++-c:要求只編譯不鏈接課后嘗試:可用來提高效率的幾個MAKE宏$@代表目標的全名(含后綴)$*代表無后綴的目標名$<代表規(guī)則中的源程序名25運行Makefile的基本方法在源代碼所在目錄中,打開控制臺窗口,然后輸入相應的命令(如下所示)下面命令行中的

表示輸入回車鍵方法1:make

方法2:make任務名

makecleanmaketest.exe方法3:make-fmakefile的文件名

make–fmy_mkfile方法4:make-fmakefile的文件名

任務名

make–fmy_mkfiletest.exe2627哦……就這些了?是的。這么簡單?是的。沒蒙我吧?沒有。那,我能不用它嗎~~~?!@#$%^&28為什么需要MAKE&Makefile?

通常,工程的相關配置需要存放在DSP文件中,查找與修改很麻煩在配置上容易造成意想不到的不一致(如DEBUG,RELEASE)VC++6.0ProjectSettings這些依賴于IDE的設置信息保存在DSP文件中,與源代碼是分離的!29只基于IDE,不能管理跨平臺源代碼只基于IDE,不能與CVS工具銜接只基于IDE,不能進行“項目自動化”UnitTestingNightlyBuild…只基

溫馨提示

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

評論

0/150

提交評論