乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      如何寫 makefile文件

       danydany_ok 2011-01-12

      如何寫 makefile文件 收藏

      如何寫 makefile文件

      學習別人的程序就面臨著重寫makefile的問題.下面以問答的形式來解釋如何寫makefile文件.

      1.makefile的核心:

          target...(目標文件|object文件|可執(zhí)行文件|標簽)  : prerequisites( 生成target所需要的文件,也可以是target中的一種...)

             Command (shell 命令)

          

          target這一個或多個的目標文件依賴于prerequisites中的文件,其生成規(guī)則定義在command中。prerequisites中如果有一個以上的文件比target文件更新的話,command所定義的命令就會執(zhí)行。

               

      2.make 的工作原理:

          例, 文件名:makefiletest

          test : test.o

             gcc -o test test.o

          test.o: test.h test.c

             gcc -c test.c

          clean:

             rm test.o test

      在默認方式下,只輸入make命令。其會做如下工作:

      make會在當前目錄下找名字為“Makefile文件”或“makefile文件”的文件。如果找到,它會找文件中的第一個目標文件 (target)。在上面的例子中,它會找到makefiletest這個文件,并把test作為最終的目標文件;如果test文件不存在,或是test 所依賴的后面的 .o 文件的修改時間要比test這個文件新,它就會執(zhí)行后面所定義的命令來生成test文件。

      如果test所依賴的.o文件也存在,make會在當前文件中找目標為.o文件的依賴性,如果找到,則會根據(jù)規(guī)則生成.o文件(這有點像一個堆棧的過程)。

      當然,C文件和H文件如果存在,make會生成 .o 文件,然后再用 .o 文件生成make的最終結果,也就是執(zhí)行文件test。

          這就是整個make的依賴性,make會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文件。在找尋的過程中,如果出現(xiàn)錯誤,比如最后被依 賴的文件找不到,make就會直接退出,并報錯。而對于所定義的命令的錯誤,或是編譯不成功,make就不會處理。如果在make找到了依賴關系之后,冒 號后面的文件不存在,make仍不工作

      通過上述分析,可以看出像clean這樣沒有被第一個目標文件直接或間接關聯(lián)時,它后面所定義的命令將不會被自動執(zhí)行,不過,可以顯式使make執(zhí)行。即使用命令make clean,以此來清除所有的目標文件,并重新編譯。

      在編程中,如果這個工程已被編譯過了,當修改了其中一個源文件時,比如test.c,根據(jù)依賴性,目標test.o會被重新編譯(也就是在這個依賴 性關系后面所定義的命令),則test.o文件也是最新的,即test.o文件的修改時間要比test要新,所以test也會被重新連接了。

      3 定義變量:

          ltest=test.h test.c

          上面的makefiletest可以改寫為:

             test : test.o

             gcc -o test test.o

          test.o: $(ltest)

             gcc -c test.c

          clean:

             rm test.o test

      4 makefile文件的自動推導

          test : test.o

             gcc -o test test.o

          test.o: test.h

          clean:

             rm test.o test

      看一下test.o這個target,省略了 prerequisites的 test.c和command的gcc -c test.c,這些是target為test.o能推導出來的.

      5 清空目標文件

          .PHONY : clean

              clean :

                      -rm test.o test

          前面說過,.PHONY表示clean是一個“偽目標”,而在rm命令前面加了一個小減號的目的是,如果某些文    件出現(xiàn)問題將被忽略,繼續(xù)進行后面的操作。當然,clean的規(guī)則不要放在文件的開頭,否則會變成make的    默認目標。不成文的規(guī)矩是“clean從來都放在文件的最后”

      6.注釋:

       #. 為行注釋,與//類似

      7.顯示指定makefile文件名

          將makefiletest改為make.test

          make -f make.test

      8.TAB鍵

          為command命令的識別鍵,在command頭使用,最好不要用在其它地方

      9.包含 其它 makefile文件

          include <filename>

      filename可以是當前操作系統(tǒng)Shell的文件模式(可以保含路徑和通配符)。在include前面可以有一些空字符,但是絕不能以 [Tab]鍵開始。include和<filename>可以用一個或多個空格隔開。舉個例子,有這樣幾個makefile文件:a.mk、 b.mk、c.mk,還有一個文件叫foo.make,以及一個變量$(bar),其包含了e.mk和f.mk,下面的語句:

      include foo.make *.mk $(bar)

      等價于:

      include foo.make a.mk b.mk c.mk e.mk f.mk

      10 -include和sinclude 都可以ignore error,

      11. make的工作順序

      (1) 讀入所有的makefile文件。

      (2) 讀入被include包括的其他makefile文件。

      (3) 初始化文件中的變量。

      (4) 推導隱式規(guī)則,并分析所有規(guī)則。

      (5) 為所有的目標文件創(chuàng)建依賴關系鏈。

      (6) 根據(jù)依賴關系,決定哪些目標要重新生成。

      (7) 執(zhí)行生成命令。

      12.轉義字符與通配符

          /

          *,?,[...],~

      其它請參見用戶手冊.


        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多