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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cmake,make,nmake的用法

發布時間:2023/12/13 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cmake,make,nmake的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

于是開始找跨平臺的編譯工具,其中最有名的兩個是 cmake 和 scons,cmake 之所以出名估計是因為 KDE 4 從 autotools 轉向用 cmake 來編譯。而 scons 則是 lighttpd 原來用的編譯工具,它現在也轉向 Python 了。cmake 和 python 大概代表了新一代跨平臺編譯工具的兩種方向。第一種 (cmake) 是延續并改良傳統 automake, autoconf 工具鏈,將之合為一體,但最終仍然生成 Makefile, Visual Studio 的 .sln,Xcode 的 .xcodebuild 文件,依賴現有編譯工具 (make, nmake, vcbuild, xcodebuild) 來編譯;第二種則是完全消除現有編譯工具的調用,直接調用編譯器,scons 就屬于這一類 (scons 還有一個特點是完全不用專門的語言,控制編譯的腳本就是 Python)。

從人氣上 來說,反倒是走改良路線的 cmake 比 scons 好一些,有幾個原因:scons 基于 Python,可能有些代碼不是很照顧速度,于是類似 KDE 這樣的大項目編譯起來會很慢;scons 開發比較慢,最近一直只是 bugfix。不過相對 cmake,scons 的優點是文檔非常細致可讀,而 cmake 的文檔則非常少,可以在網上找到的只有幾篇介紹性的文章和參考手冊,不像 scons 有一本 User Guide。

與之相關的工具還有 Jam (包括它的變體 FTJam, Boost.Build), Waf, Bakefile 等。其中比較新的 Waf 是一個 scons 的改進,在它的提供的 benchmark 中,顯示通過緩存方式可以大大改進編譯的速度。不過因為這個項目還很新,目前沒有什么軟件用它作為編譯系統。

Bakefile 走的則是 cmake 的路子,從名稱上也可以看出,它最終也是通過生成 Makefile 一類的文件來完成編譯的。不過不同的地方在于 cmake 用的語法很像 autotools 用的 m4 的傳統語法,而 bakefile 則完全用 XML 來定義編譯規則了,這一點倒很像 ant。Bakefile 倒是有不少著名的項目使用,比如 wxWidgets, WebKit, VCF, libxml。

?

目的:

基本掌握了 make 的用法,能在Linux系統上編程。

環境:

Linux系統,或者有一臺Linux服務器,通過終端連接。一句話:有Linux編譯環境。

準備:

準備三個文件:file1.c, file2.c, file2.h
file1.c:
#include
#include "file2.h"
int main()
{
printf("print file1$$$$$$$$$$$$$$$$$$$$$$$$\n");
File2Print();
return 0;
}

file2.h:

#ifndef FILE2_H_
#define FILE2_H_

#ifdef __cplusplus

extern "C" {

#endif

void File2Print();

#ifdef __cplusplus

}

#endif

#endif


file2.c:
#include "file2.h"
void File2Print()
{
printf("Print file2**********************\n");
}

基礎:

先來個例子:
有這么個Makefile文件。(文件和Makefile在同一目錄)
=== makefile 開始 ===
helloworld:file1.o file2.o
gcc file1.o file2.o -o helloworld

file1.o:file1.c file2.h
gcc -c file1.c -o file1.o

file2.o:file2.c file2.h

gcc -c file2.c -o file2.o


clean:

rm -rf *.o helloworld

=== makefile 結束 ===

一個 makefile 主要含有一系列的規則,如下:
A: B
(tab)
(tab)

每個命令行前都必須有tab符號。

上面的makefile文件目的就是要編譯一個helloworld的可執行文件。讓我們一句一句來解釋:

helloworld : file1.o file2.o: helloworld依賴file1.o file2.o兩個目標文件。

gcc File1.o File2.o -o helloworld: 編譯出helloworld可執行文件。-o表示你指定 的目標文件名。

file1.o : file1.c: file1.o依賴file1.c文件。

gcc -c file1.c -o file1.o: 編譯出file1.o文件。-c表示gcc 只把給它的文件編譯成目標文件, 用源碼文件的文件名命名但把其后綴由“.c”或“.cc”變成“.o”。在這句中,可以省略-o file1.o,編譯器默認生成file1.o文件,這就是-c的作用。

file2.o : file2.c file2.h
gcc -c file2.c -o file2.o

這兩句和上兩句相同。

clean:

rm -rf *.o helloworld

當用戶鍵入make clean命令時,會刪除*.o 和helloworld文件。

如果要編譯cpp文件,只要把gcc改成g++就行了。

寫好Makefile文件,在命令行中直接鍵入make命令,就會執行Makefile中的內容了。

到這步我想你能編一個Helloworld程序了。

?

Makefile的關鍵是:
1。dependence rule;
2。action;
3。variable assignment and shell scripts.

Dependence rule寫的是文件間的依賴關系,比如a.out是由a.o和libmylib.a生成的,a.o是由a.C編譯而來的。寫成makefile的dependence rule就是:
a.out:a.o libmylib.a
你可以用些的符號來寫些通用的dependence rule,比如:
.C.o:
%.o:%.C
它的意思是所有的.o文件依賴于對應的.C文件。不同的make(比如GNU make,Sun make等)可能有不同的特殊符號。

Action就是定義該做什么,比如:
a.out:a.o libmylib.a
CC -o a.out a.o -lmylib
第一行是dependence rule,第二行是對應的動作。它們的意思是,如果a.o或libmylib.a比a.out新,就執行第二行。再如:
.C.o:
%.o:%.C
CC -g -c $<
意思是如果然后.C文件比對應的.o文件新,就編譯它。注意,action rule一定不能用空格起頭而是tab起頭。

變量的賦值很簡單:
<變量>=<值>
比如:
INCLUDEDIR=$(PROJECT_HOME)/include $(THIRDPARTY_HOME)/include
用變量時一定要用小括號:
.C.o:
CC -g -c $(INCLUDEDIR) $<
Shell script可能要先聲明用什么shell:
SHELL=/usr/bin/sh
在makefile里寫shell script和其它地方有許多不同。其中最大的不同是makefile中的shell script不能隨便放換行符,我一般是把它們放用續行符("\")連起來.??

?

要使VC產生*.MAK文件,你可以這樣:
打開Tools菜單------------>Options------------------------->Build選項卡 ---------------------->在"Export makefile when saving project file"前面得方框打勾

如果您喜歡在命令行下工作,您需要執行在Developer Studio的BIN子目錄下的VCVARS32.BAT來設置環境變數。要從命令行執行make檔案,可以轉到你得工程目錄比如HelloMsg并執行:

NMAKE /f HelloMsg.mak CFG="HelloMsg - Win32 Debug"
或者

NMAKE /f HelloMsg.mak CFG="HelloMsg - Win32 Release"
然後您可通過輸入:

DEBUG\HELLOMSG
或者

RELEASE\HELLOMSG
從命令列執行.EXE檔案。?

?

http://hi.baidu.com/jian_fei_yang/item/d4f4462ffd35900943634af8原文:

轉載于:https://www.cnblogs.com/PursuitOnly/archive/2013/01/07/2849661.html

總結

以上是生活随笔為你收集整理的cmake,make,nmake的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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