版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
海闊憑魚躍天高任鳥飛
Autoconf介紹李俊良2010/08/18內(nèi)容大綱學習目的Autoconf介紹Autoconf框架圖Autoconf流程Autoconf優(yōu)化Autoconf小結(jié)FAQ學習目的如何方便在linux系統(tǒng)上寫c/c++等工程的一種技巧,從而提高工程化的能力;方便的閱讀理解開源代碼;容易理解掌握整個工程源碼的架構(gòu);寫出優(yōu)秀而漂亮的代碼框架。Autoconf介紹今天我們一起來了解一下關(guān)于自動化編譯的神秘面紗。無論是在Linux還是在Unix環(huán)境中,make都是一個非常重要的編譯命令??梢酝ㄟ^查閱make的幫助文檔來手工編寫Makefile,當然我們更愿意自動生成Makefile。要想了解更多的自動化編譯的知識,不僅僅要熟悉Makefile的語法,還要熟悉m4規(guī)則。實踐還證明:光靠這些規(guī)則理論是不夠的,我們要學會在實踐中創(chuàng)造規(guī)則、完善理論。Autoconf框架圖Autoconf流程-如何寫configure.in在開始antoconf之前,了解一下Autoconf依賴于:Bash,Coreutils,Diffutils,Grep,M4,Make,Perl,Sed.autoscan程序可以用來為軟件包創(chuàng)建configure.in文件。autoscan在以命令行參數(shù)中指定的目錄為根(如果未給定參數(shù),則以當前目錄為根)的目錄樹中檢查源文件。它為通常的輕便問題搜索源文件,并且為那個包創(chuàng)建一個configure.scan文件,這個文件就是configure.in的前身。autoscan程序是perl語言寫的。configure.in文件中的內(nèi)容都是以AC_INIT開頭,以AC_OUTPUT結(jié)束。Autoconf流程-如何寫configure.inconfiugre.in文件的一般布局AC_INIT測試程序測試函數(shù)庫測試頭文件測試類型定義測試結(jié)構(gòu)測試編譯器特性測試庫函數(shù)測試系統(tǒng)調(diào)用AC_OUTPUTAutoconf流程-如何寫configure.in宏含義AC_INIT(FILE)用來檢查源代碼所在的路徑。AM_INIT_AUTOMAKE(PACKAGE,VERSION)這個宏是必須的,它描述了我們將要生成的軟件包的名字及其版本號:PACKAGE是軟件包的名字,VERSION是版本號。當你使用makedist命令時,它會給你生成一個類似helloworld-1.0.tar.gz的軟件發(fā)行包,其中就有對應的軟件包的名字和版本號。AC_PROG_CC檢查系統(tǒng)所用的C編譯器。AC_CHECK_LIB(library,function,[action-if-found],[action-if-not-found],[other-libraries])該宏用來檢查lib庫中是否存在指定的函數(shù)。當測試成功時,執(zhí)行shell命令action_if_found或者action_if_found當為空時,在輸出變量LIBS中添加-llib。action_if_not_found把-lother_libs選項傳給link命令。AC_OUTPUT要輸出的Makefile的名字。AC_LANG_CPLUSPLUS對C++語言的支持。AC_PROG_LIBTOOL對libtool工具的支持。AC_CHECK_HEADERS檢查系統(tǒng)中或環(huán)境路徑中是否存在指定的頭文件,和AC_CHECK_LIB一樣支持條件語句。AC_CHECK_FUNCS檢查libraryfunctions,和AC_CHECK_LIB一樣支持條件語句。Autoconf流程-如何編寫m4文件m4是傳統(tǒng)Unix的宏處理的安裝啟動的應用,其對應的是.m4文件記錄了很多無法理解的宏。詳細的介紹見官方網(wǎng)站:M4文件定義的宏一般需要在configure.in文件中調(diào)用,使用aclocal來進行解析aclocal也是一個perl腳本程序,aclocal根據(jù)configure.in文件的內(nèi)容,自動生成aclocal.m4文件。.m4文件很有趣,很多gcc無法完成的工作,m4可以方便的幫助完成;特別是環(huán)境依賴、系統(tǒng)移植性等方面。Autoconf流程-如何編寫m4文件M4文件的寫法貌似shell腳本,不過更多的是宏的寫法,比如定義一個宏:AC_DEFUN其他常用的宏:AC_ARG_ENABLEAC_ARG_WITHAM_CONDITIONALAC_SUBSTAS_IFAutoconf流程-autoheader該工具通常會從“acconfig.h”文件中復制用戶附加的符號定義,因此此處沒有附加符號定義,所以不需要創(chuàng)建“acconfig.h”文件。Autoconf流程-如何編寫automakeautomake要用的腳本配置文件是Makefile.am,用戶需要自己創(chuàng)建相應的文件。之后,automake工具轉(zhuǎn)換成Makefile.in。automake有相對應的一些參數(shù)可以配置,比如-a等等可執(zhí)行文件靜態(tài)庫測試文件noinst_PROGRAMS=foofoo_SOURCES=foo_LDADD=foo_LDFLAGS=foo_DEPENDENCIES=noinst_LIBRARIES=libfoo.afoo_a_SOURCES=foo_a_LDADD=foo_a_LIBADD=foo_a_LDFLAGS=check_PROGRAMS=dofoodofoo_SOURCES=dofoo_LDADD=TESTS_ENVIRONMENT=TESTS=$(check_PROGRAMS)Autoconf流程-如何編寫automake目前automake支持三種目錄層次:flat、shallow和deep。Flat指的是所有文件都位于同一個目錄中就是所有源文件、頭文件以及其他庫文件都位于當前目錄中,且沒有子目錄。Termutils就是這一類。shallow指的是主要的源代碼都儲存在頂層目錄,其他各個部分則儲存在子目錄中。就是主要源文件在當前目錄中,而其它一些實現(xiàn)各部分功能的源文件位于各自不同的目錄。Automake本身就是這一類。deep指的是所有源代碼都被儲存在子目錄中;頂層目錄主要包含配置信息。就是所有源文件及自己寫的頭文件位于當前目錄的一個子目錄中,而當前目錄里沒有任何源文件。GNUcpio和GNUtar就是這一類。Yahoo的ydm、dcp等工程也屬于這一類。flat類型是最簡單的,deep類型是最復雜的。但是實際工程中我們經(jīng)常用到的是deep類型的。Autoconf流程-如何編寫automakeMakefile.am中盡量使用相對路徑,系統(tǒng)預定義了兩個基本路徑:$(top_srcdir)工程最頂層目錄,用于引用源程序;$(top_builddir)定義了生成目標文件上最上層目錄,用于引用.o等編譯出來的目標文件。Makefile.am中也類似于m4一樣,定義了很多的宏,比如:includedir頭文件的路徑,等同于-I;也可以使用libfooincludedir指定特定的庫引用的頭文件路徑;include_HEADERS定義需要安裝的頭文件,也可以libfooinclude_HEADERS來指定特定的庫需要安裝的頭文件;一般和libfooincludedir結(jié)合使用;Autoconf流程-如何編寫automakedata_DATA需要安裝數(shù)據(jù)文件AUTOMAKE_OPTIONS由于GNU對自己發(fā)布的軟件有嚴格的規(guī)范,比如必須附帶許可證聲明文件COPYING等,否則automake執(zhí)行時會報錯。automake提供了三種軟件等級:foreign、gnu和gnits,讓用戶選擇采用,默認等級為gnu。在本例使用foreign等級,它只檢測必須的文件。bin_PROGRAMS或lib_LIBRARIES定義要產(chǎn)生的執(zhí)行文件名。如果要產(chǎn)生多個執(zhí)行文件,每個文件名用空格隔開。對于可執(zhí)行文件和靜態(tài)庫類型,如果只想編譯,不想安裝到系統(tǒng)中,可以用noinst_PROGRAMS代替bin_PROGRAMS,noinst_LIBRARIES代替lib_LIBRARIES。Autoconf流程-如何編寫automakeMakefile.am還可以支持pkgconfig,對于pc文件也有相應的宏的定義:pcdatadirpc文件的安裝目錄pcdata_DATA安裝的pcdata的文件名稱Autoconf流程-如何編寫automakeMakefile.am還提供了一些全局變量供所有的目標體使用:INCLUDES鏈接時所需要的頭文件LDADD鏈接時所需要的庫文件LDFLAGS鏈接時所需要的庫文件選項標志EXTRA_DISTSUBDIRS在處理本目錄之前要遞歸處理哪些子目錄Autoconf流程-如何編寫automakeAM_LDFLAGS同LDFLAGS一樣,只是AM_LDFLAGS優(yōu)先加載;AM_CPPFLAGS(AM_CFLAGS)同CPPFLAGS一樣,只是AM_CPPFLAGS優(yōu)先加載;AM_CXXFLAGS同CXXFLAGS一樣,只是AM_CXXFLAGS優(yōu)先加載;CLEANDIRS需要刪除的目錄MOSTLYCLEANFILES需要刪除的文件Autoconf流程—autoconfautoconf是一個用于生成可以自動地配置軟件源碼包,用以適應多種UNIX類系統(tǒng)的shell腳本工具,其中autoconf需要用到m4,便于生成腳本。運行configure文件,生成了我們要的Makefile文件Autoconf優(yōu)化-rpm方案我們知道,創(chuàng)建一個rpm包,需要用到一個spec文件,來注明rpm包的生成信息。#definerpmbuildrootRPMBUILDTOPDIR=$(shellunsetRPMBUILDTOPDIR;if[-f${HOME}/.rpmmacros];thenexportRPMBUILDTOPDIR=`grep_topdir${HOME}/.rpmmacros|awk'{print$$2}'`;elseexportRPMBUILDTOPDIR=/usr/src/redhat;fi;echo$${RPMBUILDTOPDIR};)Autoconf優(yōu)化-rpm方案下面的這些有點像Makefile吧,但是這個是在Makefile.am文件中:.PHONY:rpmrpm:dist@PACKAGE@.spec $(RM)${RPMBUILDTOPDIR}/SOURCES/$(distdir).tar.gz $(RM)${RPMBUILDTOPDIR}/SPECS/@PACKAGE@.spec $(LN_S)`pwd`/$(distdir).tar.gz${RPMBUILDTOPDIR}/SOURCES $(LN_S)`pwd`/@PACKAGE@.spec${RPMBUILDTOPDIR}/SPECS rpmbuild-ba${RPMBUILDTOPDIR}/SPECS/@PACKAGE@.spec這樣就可以通過makerpm命令來生成rpm了,值得注意的是如果沒有在.rpmmacros文件內(nèi)指定_topdir,則需要sudo權(quán)限來根據(jù)系統(tǒng)變量來生成rpm。Autoconf小結(jié)-補充Libtool工具添加需要注意libtoolize步驟針對CFLAGS和CXXFLAGS對默認GNU的編譯選項的更改針對一個lib可以拆分成兩個libdata_DATA需要指定datadir變量的位置AC_HEADER_STDC等宏的合理添加makedist等各種包的打法autoreconf的使用Autoconf小結(jié)-FAQ依賴的其他項目是從代碼編譯的,同時他們的makefile是自己寫的一套其他項目從代碼進行編譯的話,可以一次性把編譯好的lib和頭文件放到你工程下的lib和include目錄下,而不是你每次修改自己工程的源文件都需要make一下其他的項目。我們的目的并不是讓別人遵從我們的想法,而是宣揚我們的想法是多么的好,甚至你有更好的想法,我們會一起改進autoconf。make的時候發(fā)生的錯誤有時候奇奇怪怪的,比如鏈接起來了其他代碼片段一般在make出現(xiàn)錯誤了,可以從錯誤代碼原因進行分析,只要你遵守“游戲規(guī)則”,是不會產(chǎn)生鏈接到其它的代碼片段的。這個autoconf如何和java源碼一起編譯我們可以寫Makefile.am,方法如同寫Makefile一樣,把java里面的編譯器,比如ant包含進來,完成我們的make過程即可。Autoconf小結(jié)-FAQ執(zhí)行./configure時候出現(xiàn)循環(huán)等問題請重新執(zhí)行aclocal;autoheader;libtoolize--force;automake-a;autoreconf一系列命令,然后./configure,如果make再出現(xiàn)問題,請makeclean后再次make。怎么確定不需要執(zhí)行aclocal等一系列命令一般來說,修改configure.in(ac)或增加(減少)m4文件都需要進行執(zhí)行aclocal等一系列命令,其他比如修改Makefile.am等不需要執(zhí)行。我不會用autoconf,也不會寫makefile學,除非你不想用c/c++。用的多了,經(jīng)常會碰到一些問題,該找誰?Google和gnu的網(wǎng)站我曾經(jīng)碰到的一些不好的現(xiàn)象和值得優(yōu)化的建議:THANKYOU!Rwb#Fk+Ot8XCh(Lq5Tyd$Hm1QvaZEj-Ns7WAf&Jo3Sxc!Gl0Pu9YCh(Lq5Uze%In2Rwb#Fj-Ns7WBg*Kp4Tyd$Hm0PKp4Tyd$Hm1QvaZEj-Nr6VAf&Jo3Sxc!Gl0Pu8XCh(Lq5Uze%In2RwaZEj-Ns7WBg*Kp4Tyd!Gl0Pu9YDi)Mr6VAf&In2Rwb#Fk+Ot8XCh(Kp4Tyd$Hm1QvaZEj-Nr6VAf&Jo3Sxc!Gl0Pu8XCh(Lq5Uze%In2RwaZEj-Ns7WBg*Kp4Tyd!Gl0Pu9YDi)Mr6VAf&In2Rwb#Fk+Ot8XSxc!Gl+Ot8XCh(Lq5Uze%In2QvaZEj-Ns7WBg*Kp4Txc!Gl0Pu9YDi)Mr6Vze%In2Rwb#Fk+Ot8XCg*Kp4Tyd$Hm1QvaZEj)Mr6VAf&Jo3Sxc!Gl+Ot8XCh(Lq5Uze%In2QvaZEj-Ns7WBg*Kp4Txc!Gl0Pu9YDi)Mr6Vze%In2Rwb#Fk+Ot8XCg*Kp4Tyd$Hm1QvaZEj)M9YDi)Mr6VAf%In2Rwb#Fk+Ot8XCh(Kp4Tyd$Hm1QvaZEj-Nr6VAf&Jo3Sxc!Gl0Pt8XCh(Lq5Uze%In2RwaZEj-Ns7WBg*Kp4Tyd!Gl0Pu9YDi)Mr6VAf%In2Rwb#Fk+Ot8XCh(Kp4Tyd$Hm1QvaZEj-Nr6VAf&Jo3Sxc!Gl0Pu8XCh(Lq5Uze%In2RwaZEj-Ns7WRwb#Fk+Ot8XCg*Kp4Tyd$Hm1QvaZEi)Mr6VAf&Jo3Sxc!Gl+Ot8XCh(Lq5Uze%In2QvaZEj-Ns7WBg*Kp4Sxc!Gl0Pu9YDi)Mr6Vze%In2Rwb#Fk+Ot8XCg*Kp4Tyd$Hm1QvaZEi)Mr6VAf&Jo3Sxc!Gl+Ot8XCh(Lq5Uze%In2QvaZEj-Ns7WBg*Kp4Sxc!o3Sxc!Gl0Pt8XCh(Lq5Uze%In2RwaZEj-Ns7WBg*Kp4Tyc!Gl0Pu9YDi)Mr6VAf%In2Rwb#Fk+Ot8XCh(Kp4Tyd$Hm1QvaZEj-Mr6VAf&Jo3Sxc!Gl0Pt8XCh(Lq5Uze%In2RwaZEj-Ns7WBg*Kp4Tyd!Gl0Pu9YDi)Mr6VAf%In2Rwb#Fk+Oto3Sxc!Gl+Ot8XCh(Lq5Uze%In1QvaZEj-Ns7WBg*Kp4Sxc!Gl0Pu9YDi)Mr6Vze%In2Rwb#Fk+Ot8XBg*Kp4Tyd$Hm1QvaZEi)Mr6VAf&Jo3Sxc!Gl+Ot8XCh(Lq5Uze%In1QvaZEj-Ns7WBg*Kp4Sxc!Gl0Pu9YDi)Mr6Vze%In2Rwb#n2RvaZEj-Ns7WBg*Kp4Tyc!Gl0PIn2Rwb#Fk+Ot8WBg*Kp4Tyd$Hm1QvaZDi)Mr6VAf&Jo3Sxc!Gk+Ot8XCh(Lq5Uze%Im1QvaZEj-Ns7WBg*Kp3Sxc!Gl0Pu9YDi)Mr6Uze%In2Rwb#Fk+&Jo3Sxb#Fk+Ot8XCh(Lq5Uze$Hm1QvaZEj-Ns7WBg*Jo3Sxc!Gl0Pu9YDi)Lq5Uze%In2Rwb#Fk+Os7WBg*Kp4Tyd$Hm1Qv9YDi)Mr6VAf&Jo3Sxb#Fk+Ot8XCh(Lq5Uze$Hm1QvaZEj-Ns7WBg*Jo3Sxc!Gl0Pu9YDi)Lq5Uze%InUze%Im1QvaZEj-Ns7WBg*Kp3Sxc!Gl0Pu9YDi)Mr5Uze%In2Rwb#Fk+Ot8WBg*Kp4Tyd$Hm1QvaZDi)Mr6VAf&Jo3Sxc!Fk+Ot8XCh(Lq5Uze%Im1QvaZEj-Ns7WBg*Kp3Sxc!Gl0Pu9YDi)Mr5Uze%In2Rwb#Fk+Ot8WBg*Kpk+Ot8XCh(Lq5Uze$Hm1QvaZEj-Ns7WBg&Jo3Sxc!Gl0Pu9YDi)Lq5Uze%In2Rwb#Fk+Os7WBg*Kp4Tyd$Hm1Qu9YDi)Mr6VAf&Jo3Sxb#Fk+Ot8XCh(Lq5Uze$Hm1QvaZEj-Ns7WBg&YCh(Lq5Uze%In2Rwb#Fj-Ns7WBg*Kp4Tyd$Hl0Pu9YDiPu9YDi(Lq5Uze%In2Rwb#Fk+Ns7WBg*Kp4Tyd$Hm1Pu9YDi)Mr6VAf&Jo3Swb#Fk+Ot8XCh(Lq5Uzd$Hm1QvaZEj-Ns7WBf&Jo3Sxc!Gl0Pu9YDi(Lq5Uze%In2Rwb#Fk+Ns7WBg*Kp4Tyd$Hm1Pu9YDi)Mr6VAf&JEj-Ns7VAf&Jo3Sxc!Gl0Pu9YCh(Lq5Uze%In2Rwb#Ej-Ns7WBg*Kp4Tyd$Hl0Pu9YDi)Mr6VAf&Jo2Rwb#Fk+Ot8XCh(Lq4Tyd$Hm1QvaZEj-Ns7VAf&Jo3Sxc!Gl0Pu9YCh(Lq5Uze%In2Rwb#Ej-Ns7WBg*s7WBf&Jo3Sxc!Gl0Pu9YDi(Lq5Uze%In2Rwb#Fk-Ns7WBg*Kp4Tyd$Hm1Pu9YDi)Mr6VAf&Jo3Swb#Fk+Ot8XCh(Lq5Uys6VAf&Jo3Sxc!Gl0Pu9XCh(Lq5Uze%In2RwbZEj-Ns7WBg*Kp4Tyd$Glh*Kp4Tyd$Hm1QvaZEj)Mr6VAf&Jo3Sxc!Gl0Ot8XCh(Lq5Uze%In2RvaZEj-Ns7WBg*Kp4Tyc!Gl0Pu9YDi)Mr6VAe%In2Rwb#Fk+Ot8XCh*Kp4Tyd$Hm1QvaZEj-Mr6VAf&Jo3Sxc!Gl0Ot8XCh(Lq5Uze%In2yd$Hm1QvaZEj-Ns6VAf&Jo3Sxc!Gl0Pu8XCh(Lq5Uze%In2RwbZEj-Ns7WBg*Kp4Tyd$Gl0Pu9YDi)Mr6VAf&In2Rwb#Fk+Ot8XCh(Lp4Tyd$Hm1QvaZEj-Ns6VAf&Jo3Sxc!Gl0Pu8XCh(Lq5UPu9YDi)Mr6VAe%In2RwbYDi)t8XCh(Lq5Uze%In2RwaZEj-Ns7WBg*Kp4Tyd!Gl0Pu9YDi)Mr6VAf%In2Rwb#Fk+Ot8XCh(Kp4Tyd$Hm1QvaZEj-Nr6VAf&Jo3Sxc!Gl0Pt8XCh(Lq5Uze%In2RwaZEj-Ns7WBg*Kp4Tyd!Gl0Pup4Tyd$Hm1QvaZEi)Mr6VAf&Jo3Sxc!Gl+Ot8XCh(Lq5Uze%In2QvaZEj-Ns7WBg*Kp4Sxc!Gl0Pu9YDi)Mr6Vze%In2Rwb#Fk+Ot8XCg*Kp4Tyd$Hm1QvaZEi)Mr6VAf&Jo3Sxc!Gl+Ot8XSxc!Gl0Pu9YDi)Mq5Uze%In2Rwb#Fk+Ot7WBg*Kp4Ty%In1QvaZEj-Ns7WBg*Kp3Sxc!Gl0Pu9YDi)Mr6Uze%In2Rwb#Fk+Ot8XBg*Kp4Tyd$Hm1QvaZDi)Mr6VAf&Jo3Sxc!Gk+Ot8XCh(Lq5Uze%In1QvaZEj-Ns7WBg*#Fk+Os7WBg*Kp4Tyd$Hm1Qv9YDi)Mr6VAf&Jo3Sxb#Fk+Ot8XCh(Lq5Uze$Hm1QvaZEj-Ns7WBg*Jo3Sxc!Gl0Pu9YDi)Lq5Uze%In2Rwb#Fk+Os7WBg*Kp4Tyd$Hm1Qv9YDi)Mr6Di)Mr6Uze%In2Rwb#Fk+Ot8WBg*Kp4Tyd$Hm1QvaZDi)#Fk+Ot8XCh(Lq5Uzd$Hm1QvaZEj-Ns7WBg&Jo3Sxc!Gl0Pu9YDi)Lq5Uze%In2Rwb#Fk+Ns7WBg*Kp4Tyd$Hm1Qu9YDi)Mr6VAf&Jo3Sxb#Fk+Ot8XChc!Gl0Pu9YCh(Lq5Uze%In2Rwb#Fj-Ns7WBg*Kp4Tyd$Hl0Pu9YDi)Mr6VAf&Jo2Rwb#Fk+Ot8XCh(Lq5Tyd$Hm1QvaZEj-Ns7VAf&Jo3Sxc!Gl0Pu9YCh(Lq5Uze%In2Rwb#F1QvaZEj-Ns7WBf&Jo3Sxc!Gl0Pu9YDwb#Ej-Ns7WBg*Kp4Tyd$Gl0Pu9YDi)Mr6VAf&Jn2Rwb#Fk+Ot8XCh(Lq4Tyd$Hm1QvaZEj-Ns6VAf&Jo3Sxc!WBg*Kp4Tyc!Gl0Pu9YDi)Mr6VAf%In2Rwb#Fk+Ot8XCh*Kp4Tyd$Hm1QvaZEj-Mr6VAf&Jo3Sxc!Gl0Pt8XCh(Lq5Uze%In2RvaZEj-Ns7WBg*Kp4Tyc!o3Sxc!Gl0Pu9XCh(Lq5Uze%In2RwbZEj-Ns7WBg*Kp4Tyd$Gl0Pu9YDi)Mr6+Ot8XCg*Kp4Tyd$Hm1QvaZE
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藝術(shù)品交易鑒定規(guī)則
- 如何做一個企業(yè)規(guī)劃
- 課件重要理念教學課件
- 潔凈區(qū)的管理
- 初中日語人教版七年級全冊+八年級一二單元單詞聽寫 課件
- 端午節(jié)團隊活動策劃
- 兒童抽搐應急措施
- 快速性心律失常藥物治療
- 初中地理教案課后反思
- 級神奇的紙說課稿
- 人民調(diào)解講稿課件
- 新蘇科版八年級上冊初中數(shù)學全冊教案
- 變截面現(xiàn)澆連續(xù)箱梁支架法施工方案
- 機械傷害應急預案演練記錄
- 整體施工方案施工組織總體設想、方案針對性和施工劃分
- 拼音拼讀練習過關(guān)訓練(無漢字)
- 乳腺癌相關(guān)解剖和手術(shù)技巧體會-PPT課件
- 電廠氨區(qū)液氨儲罐置換方案
- 地理說課ppt課件
- ket分類詞匯表
- 茶藝館會員制度管理辦法
評論
0/150
提交評論