『壹』 有makefile文件怎麼編譯
makefile不是被編譯的,它是用來指導編譯器和鏈接器來編譯程序源文件的,這個文件也是個文本文件,具體格式你可以在網上查一下。
『貳』 如何編寫makefile
你先用gcc把它給編譯出來。然後再想用makefile
gcc最一般的用法就是:
gcc
-o
要生成的可執行文件名
源代碼文件名
如:gcc
-o
hello.x
hello.c
如果一些頭文件要指明的話,可以這樣:
gcc
-o
hello.x
-I頭文件所在的文件夾
-l一些庫名
hello.c
最通常,我們用到一些數學庫。gcc
-o
hello.x
-lm
hello.c
makefile的話,你可以基於上述的語句進行修改:建議你看點資料,或一些典型的例子。但是注意的是規則那一行,得用Tab鍵打頭。
hello.x
:
hello.o
gcc
-o
hello.x
hello.o
(這一行,得用Tab打頭)
hello.o
:
hello.c
頭文件
gcc
-c
hello.o
hello.c
-I頭文件所在目錄
-lm
(這一行,得用Tab打頭)
『叄』 makefile 怎麼編譯 c文件
1.單個.c文件
kernel配置文件中定義
CONFIG_RUNYEE_CAMVIB=m
注意上面的m,表示作為一個模塊進行編譯,最後在MAKEFILE中需要用到的編譯開關。
然後再相應的源碼目錄中的MAKEFILE中添加如下語句:
obj-$(CONFIG_RUNYEE_CAMVIB) := camvib.o
『肆』 在VC里如何用Makefile文件編譯
運行cmd.exe (or command.com in win9x)->進到vc/bin目錄->運行vc-vars32.bat->進到makefile 所在的目錄->nmake /f makefile
從sourceforge上下載下來的libjpeg源代碼中有一個makefile.vc的文件,可以通過nmake /f makefile.vc [nodebug=1]來編譯libjpeg,但是只能編譯靜態庫,如果需要編譯dll以便在emacs等程序中使用的話,需要修改makefile.vc和jmorecfg.h文件。在makefile.vc文件中添加編譯dll規則:
以下內容為程序代碼:
libjpeg.lib: $(LIBOBJECTS) $(RM) libjpeg.lib lib -out:libjpeg.lib $(LIBOBJECTS) #
添加以下這行 libjpeg.dll: $(LIBOBJECTS) $(RM) libjpeg.dll link -dll -out:libjpeg.dll $(LIBOBJECTS) 在jmorecfg.h中添加#define _WIN32_#define JPEG_DLL 然後nmake /f makefile.vc nodebug=1就可以編譯了。
將makefile復制為一個.mak文件,然後用VC打開即可!
.mak 就是一個makefile
可以指定怎樣編譯(命令行,必須先設置VC命令行環境)
vcvars32.bat可設置環境,在vc98/bin下 nmake /f XXXX.mak
如果有一個makefile就只要nmake就可以了。
『伍』 用makefile編輯的文件怎麼編譯
我們在linux下進行編程的時候,會發現我們沒有工程文件,然後,我們在不同目錄下
的文件如此雜亂無章,讓我們感到頭疼,怎麼可以把它們進行同步在一起,然後,一起進行編譯呢,
這里,就是我們需要用到的工具了,makefile文件的作用了,makefile可以有效地組織文件和目錄,
把處於不同目錄下的文件進行同時編譯,而不會因為目錄的不同,而有所差別。
這里,我來分享一下makefile的簡單的用法。
1:基本的格式:
magproc:magproc.o dbproc.o
$(EC) -o $(BINPATH)/$@ $? $(LIB)
可執行文件名:鏈接文件
編譯工具 (參數) (鏈接庫) 文件名
2:工程文件Make.defines
3:makefile文件
http://jingyan..com/article/48206aeaf9e82e216ad6b335.html
『陸』 如何使用Makefile自動編譯iPhone程序
makefile裡面所寫的內容其實就是你要編譯的命令,那麼,什麼是編譯命令呢?
假寫你已經寫好一個程序代碼,並將之存在一個.c文件中,如:hello.c,在終端上你可以這樣做!在終端上輸入gcc -o hello hello.c
然後回車,看一看有沒有什麼反映,如果沒有打出很多英文的話,恭喜你!你完美地完成了第一步!然後,在終端中輸入./hello 看看是不是有什麼輸出了?
現在來解釋一下編譯命令:上面的命令的意思就是,使用gcc編譯器編譯hello.c源代碼,生成的文件名稱叫做hello.最後,要看程序運行結果,就要運行生成的程序也就是「./hello」了,「./」的意思就是在當前的目錄下運行。
而makefile中內容的就是上面的編譯命令,如:在makefile文件中寫入
Hello:hello.c
gcc -o Hello hello.c
保存文件之後直接在終端中輸入make,就完成編譯了!makefile存在的意義只是讓編譯更加方便,也就說,可以把所以的編譯都寫在一個makefile文件中,然後在終端中輸入make就可以完成makefile文件里的命令!
建議還是先將C語言入門,然後再學使用makefile編譯程序吧!因為剛開始的時候不用編譯很多文件,如果一個文件要編寫一個makefile文件的話,那豈不是很繁?
『柒』 makefile g++ c++11 怎麼編譯
假設有下面幾個c++文件:
wherewhen.h wherewhen.c
countdown.h countdown.c 包含了math.h, 需要連接庫文件
main.c 主函數, main.c 包含了兩個頭文件 wherewhen.h and countdown.h
1、第一種編譯方法:
g++ -Wall -g wherewhen.c countdown.c main.c -lm -o myprogram
生成可執行文件myprogram
2、第二中編譯方法, 分別編譯各個文件:
g++ -Wall -g -c wherewhen.c
g++ -Wall -g -c countdown.c
g++ -Wall -g -c main.c
g++ -g wherewhen.o countdown.o main.o -lm -o myprogram
『捌』 如何使用makefile
以hello_test.c文件為例
1.創建程序
在linux控制台界面下 ,輸入vi hello_test.c,輸入i進入編輯插入模式,輸入代碼如下:
#include <stdio.h>
int main(void)
{
printf("Hello,Word!/n");
return 0;
}
用gcc編譯程序
輸入命令:gcc hello_test.c
輸入命令:ls
顯示:a.out hello_test.c
輸入命令:./a.out //執行程序
2.使用Makefile
(1)創建Makefile,在hello_test.c所在目錄輸入 vi Makefile
(2)輸入Makefile內容。在vi插入模式下輸入:
hello_test : hello_test.c
gcc -o hello_test hello_test.c //特別注意 gcc前面不是空格,而是tab間隔符,否則會出現makefile:2: *** 遺漏分隔符錯誤
clean :
rm -fr hello_test *.o *.core
(3)輸入make,屏幕輸出 gcc -o hello_test hello_test.c,表示編譯已經通過。
生成 hello_test。
『玖』 如何用makefile編譯多個c文件
假設有下面幾個c++文件:
wherewhen.h
wherewhen.c
countdown.h
countdown.c
包含了math.h,
需要連接庫文件
main.c
主函數,
main.c
包含了兩個頭文件
wherewhen.h
and
countdown.h
1、第一種編譯方法:
g++
-Wall
-g
wherewhen.c
countdown.c
main.c
-lm
-o
myprogram
生成可執行文件myprogram
2、第二中編譯方法,
分別編譯各個文件:
g++
-Wall
-g
-c
wherewhen.c
g++
-Wall
-g
-c
countdown.c
g++
-Wall
-g
-c
main.c
g++
-g
wherewhen.o
countdown.o
main.o
-lm
-o
myprogram
『拾』 如何使用自己的makefile編譯android ndk項目
android ndk提供了一套自己的makefile管理方式,要將源碼項目移植到android平台,需要按照android的makefile規則編寫makefile,還要按android的規則部署源碼目錄,對一個有自己的makefile管理方法的大型項目來說,只是做一下makefile遷移工作就是一件很麻煩的事。
其實android ndk上的編譯說到底也就是交叉編譯,只要配置好交叉編譯工具鏈,使用原有的makefile也是可以編譯出在android運行的c、c++程序的。
以android-ndk-r4-crystax的ndk版本為例:
編譯器路徑 android-ndk-r4-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin
名稱前綴 arm-eabi-
頭文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/include
庫文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/lib
你可以試一下上面的配置,如果編譯鏈接都沒有問題,可以adb push到android設備上運行看看,什麼結果?
有點崩潰,根本運行不起來,你也許想試試看android自帶的ndk例子,確實是能夠運行的,問題在哪兒呢?
只是正確配置了編譯器、頭文件、庫文件還不夠,還需要配置編譯、鏈接的參數,android例子中編譯鏈接的參數是什麼呢?你也許想深究一下android的makefile,可是不久你會發現那是更崩潰的事情,裡面用了很多的make腳本函數。其實android的makefile是可以把執行的詳細命令輸出來的,只要make的時候加上V=1即可。可以看到確實帶了很多參數
編譯參數:
-fpic
-mthumb-interwork
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-Wno-psabi
-march=armv5te
-mtune=xscale
-msoft-float
-mthumb
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-Wa,--noexecstack
-D__ARM_ARCH_5__
-D__ARM_ARCH_5T__
-D__ARM_ARCH_5E__
-D__ARM_ARCH_5TE__
-DANDROID
鏈接參數:
-nostdlib
-Bdynamic
-Wl,-dynamic-linker,/system/bin/linker
-Wl,--gc-sections
-Wl,-z,noreloc
-Wl,--no-undefined
-Wl,-z,noexecstack
-L$(PLATFORM_LIBRARY_DIRECTORYS)
crtbegin_static.o
crtend_android.o
這其中鏈接參數中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最關鍵的,android使用了自己的進程載入器,並且自定義了c運行時的啟動結束。難怪先前編譯的進程啟動不了。