日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

基本概念(2)——make、ninja、nmake、jom

發布時間:2023/12/15 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 基本概念(2)——make、ninja、nmake、jom 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不用在命令行手動輸入編譯命令,把這些命令寫到一個txt文件內,調用make或者ninja工具自動執行編譯過程

make與makefile

多數內容copy自youtube的一個視頻:https://www.youtube.com/watch?v=E1_uuFWibuM
執行環境:原作者是在Linux下做的視頻,而我使用的是win10,win10下使用mingw-w64、msys2來安裝win下的gcc與make工具。安裝mingw-w64和msys2(我安裝后是不帶make工具的,pacman命令安裝的make)后配置下環境變量就可以使用gcc和make工具了。文本編輯器使用的是VS code。
一個可能用到的知識補充:https://www.biaodianfu.com/cygwin-ming-msys.html
mingw-w64官網:https://mingw-w64.org/doku.php/start
msys2官網:http://www.msys2.org/

為什么要用makefile

(1)簡單編譯一個c文件

命令:
gcc main.c -o main.exe
執行后會得到一個main.exe的文件。在控制臺中執行下:

這樣就得到了輸出。但是,如果.c文件很多,參數也很多,gcc的命令就會很長,源文件做一點點的修改就要執行一次冗長的gcc命令。這時候就可以使用make工具,寫一個makefile文件來執行編譯。makefile的寫法:

target是要編譯的結果,冒號后面的dependencies是依賴,command是要執行的命令(command前面是一個tab不是空格),例如:

去控制臺執行一下:

多個c文件的情況

為了試驗,寫下如下代碼,共三個文件:

如果直接使用gcc命令編譯的話,命令是:gcc main.c sayHello.c -o main.exe 如果文件特別多,只修改部分文件然后執行所有文件全部編譯的話,明顯會浪費時間。所以,這種情況下,就是對每個c文件單獨編譯,比如上圖中的sayHello.c單獨編譯成sayHello.o,最后鏈接到main.c文件。借用原視頻中的一個圖來說明下:

那么,針對我第一張圖中sayHello.c的makefaile就應該想下面這樣寫:

main.exe: main.c sayHello.o
    gcc main.c sayHello.o -o main.exe
sayHello.o: sayHello.c
    gcc -c sayHello.c -o sayHello.o


注意,按照順序,是從上向下寫,但編譯是從下向上編譯,也就是說,先編譯sayHello.c成sayHello.o,然后編譯main.c sayHello.o。注意上面編譯sayHello.c的時候有個-c參數,意思是把源文件編譯成.o的中間文件而不是.exe的可執行文件。
去執行下:

至此,已經得到的編譯的結果并且執行也沒問題,但是,由于編譯過程中出現了中間文件*.o,編譯后就沒用了,如果有很多的話一個個刪除不現實,所以在makefile中可以添加一個clean,如下:

main.exe: main.c sayHello.o
    gcc main.c sayHello.o -o main.exe
sayHello.o: sayHello.c
    gcc -c sayHello.c -o sayHello.o
clean:
    rm *.o

執行下make clean就可以清理了:

makefile文件中的變量


上圖中有三個c文件,分別都使用了“gcc”這個名字,試想下,如果有一百個c文件,那么就要寫一百次gcc,如果換編譯器,就要每一個都要修改,所以,使用一個變量來代替“gcc”就顯得很有必要了。

執行效果如下:

下面也是變量的用法示例:

多個main函數的情況

上圖是原視頻中的makefile文件,換到win下,需要在可執行文件下添加.exe,例如我的例子就可以寫成下面這樣:
1、目錄文件,我修改了兩個main文件一個是main1.c另外一個是main2.c, 這兩個文件內容是完全一樣的

2、修改makefaile內容,變化部分用紅色標出

3、去執行下

nmake

可以理解成微軟家的make,隨著vs安裝

jom

qt的定制nmake
jom是nmake的克隆,可支持并行執行多個獨立命令。它基本上增加了-j命令行開關,類似于GNU make。原始博客文章仍可以在Qt博客上找到。 https://wiki.qt.io/Jom
一般make可以加一個參數-j表示使用多少個線程來編譯,-j4就表示使用4個線程編譯.
linux下使用make,而在windows上面使用nmake,是vs提供的一個東西,但是有很個坑的事,就是nmake不支持-j這個參數,,也是就是說它是單線程編譯,Qt為了解決這樣子的一個問題,弄出一個jom.exe,這和make的功能基本是一樣的,但是他比nmake多出來的就是,-j這個參數.也就是說它支持多線程編譯.
來自 https://bbs.csdn.net/topics/392205042

總結

以上是生活随笔為你收集整理的基本概念(2)——make、ninja、nmake、jom的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。