當前位置:首頁 » 編程軟體 » makefile編譯實例

makefile編譯實例

發布時間: 2022-07-13 06:45:50

『壹』 如何使用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編譯匯編和C文件

有些場景下編譯的程序是不能依賴OS和標準的C庫的,並且需要C和匯編混合編譯,如bootloader程序,就需要制定參數-nostdlib,這樣的Makefile如下所示:
all:
arm-linux-gcc -O2 -Wall -nostdlib -march=armv4 -Wl,-T,ipl.lds uart.c ipl.c nfc.c nand.c sha1.c arm.s -o ipl.exe
arm-linux-obj -Obinary ipl.exe ipl.bin
clean:
rm -rf ipl.exe ipl.bin

『叄』 大家來幫我看看怎樣寫一個這樣的Makefile文件,通過Makefile文件編譯這個多文件的C語言程序

以下是一個最簡單的多文件+makefile的形式

編譯採用gcc 你可以修改成你的編譯器


三個文件 main.c func.c makefile

main.c

#include<stdio.h>
externvoidfunc();//這個應該放在頭文件中的比如func.h簡單起見就直接聲明了

intmain()
{
func();
}

func.c

#include<stdio.h>

voidfunc()
{
printf("helloworld ");
}

makefile

.PHONY:allmain.ofunc.o

all:main.ofunc.o
@gccmain.ofunc.o-oout
main.o:main.c
@gcc-cmain.c-omain.o
func.o:func.c
@gcc-cfunc.c-ofunc.o

所有的都是最簡單的

『肆』 如何寫一個簡單的makefile

一:makefile 雛形:
#makefile的撰寫是基於規則的,當然這個規則也是很簡單的,就是:
#target : prerequisites
command//任意的shell 命令
實例如下:
makefile:
helloworld : main.o print.o #helloword 就是我們要生成的目標
# main.o print.o是生成此目標的先決條件
gcc -o helloworld main.o print.o#shell命令,最前面的一定是一個tab鍵
mian.o : mian.c print.h
gcc -c main.c
print.o : print.c print.h
gcc -c print.c
clean :
rm helloworld main.o print.o
OK,一個簡單的makefile製作完畢,現成我們輸入 make,自動調用Gcc編譯了,
輸入 make clean就會刪除 hellowworld mian.o print.o
二:小步改進:
在上面的例子中我們可以發現 main.o print.o 被定義了多處,
我們是不是可以向C語言中定義一個宏一樣定義它呢?當然可以:
makefile:
objects = main.o print.o #應該叫變數的聲明更合適
helloworld : $(objects) //聲明了變數以後使用就要$()了
gcc -o helloworld$(objects)
mian.o : mian.c print.h
gcc -c main.c
print.o : print.c print.h
gcc -c print.c
clean :
rm helloworld $(objects)
修改完畢,這樣使用了變數的話在很多文件的工程中就能體現出方便性了。
三:再進一步:
再看一下,為沒一個*.o文件都寫一句gcc -c main.c是不是顯得多餘了,
能不能把它幹掉?而且 main.c 和print.c都需要print.h,為每一個都寫上是
不是多餘了,能不能再改進?
能,當然能了:
makefile:
objects = main.o print.o
helloworld : $(objects)
gcc -o helloworld$(objects)
$(objects) : print.h # 都依賴print.h
mian.o : mian.c #幹掉了gcc -c main.c 讓Gun make自動推導了。
print.o : print.c
clean :
rm helloworld $(objects)

『伍』 makefile 怎麼編譯 c文件

1.單個.c文件
kernel配置文件中定義
CONFIG_RUNYEE_CAMVIB=m
注意上面的m,表示作為一個模塊進行編譯,最後在MAKEFILE中需要用到的編譯開關。
然後再相應的源碼目錄中的MAKEFILE中添加如下語句:
obj-$(CONFIG_RUNYEE_CAMVIB) := camvib.o

『陸』 如何用makefile進行編譯

假設有下面幾個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

『柒』 如何用vs和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編譯多個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

『玖』 linux如何編寫並使用makefile

1、先寫Makefile編譯出***.ko文件
模板如下,保存到命名為Makefile文件里,放到你代碼的同級目錄下
TARGET=my_proc.ko
LINUXDIR=/lib/moles/$(shell uname -r)/build
PWD=$(shell pwd)
obj-m :=
obj-m += my_proc.o

all: $(TARGET)
$(TARGET): $(OBJS)
make -C $(LINUXDIR) SUBDIRS=$(PWD) moles
clean:
rm -f moles.order Mole.symvers $(TARGET) *.mod.c *.o
rm -rf .tmp_versions .mod* Mole.markers
2、make
3、root許可權下用命令插入模塊
insmod my_proc.ko
4、可以用你寫的應用程序打開、操作模塊了
5、查看模塊命令
lsmod
cat /proc/moles
modinfo my_proc.ko
6、root下卸載模塊
rmmod

『拾』 編寫一個簡單的 makefile 文件

makefile文件裡面主要有三種內容:


1.變數聲明:
變數聲明就是一種基本的嚴格字元替換的操作。
比如在前面聲明了:objects=program.o foo.o utils.o
那麼在後面出現的所有$(objects)或者${objects}都會被自動替換成上面的那個字元序列,而且是嚴格替換,即不帶空格的。

2.映射法則

3.命令:
映射法則和命令通常都是聯合起來組成這樣的結構形式:
target... : prerequisites..
command

可以簡單地理解為通過prerequisites,也就是先決的依賴文件,採取後面描述的相應的命令(這里的命令都是linux里的shell命令)command之後(一般是)生成了文件target。命令的前面都要按以下tab建留一段空白來表示它是命令。
有的target後面並沒有先決條件,也就是後面的命令是無條件執行的。

makefile 文件c語言程序:
#include <linux/init.h>
#include <linux/mole.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{

printk(KERN_ALERT "Goodbye, cruel world\n");
}

mole_init(hello_init);
mole_exit(hello_exit);

makefile:
# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)

obj-m := hello.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else

KERNELDIR ?= /lib/moles/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) moles

endif

熱點內容
我的世界伺服器進不去該怎麼辦 發布:2025-02-08 11:47:41 瀏覽:232
linux的telnet 發布:2025-02-08 11:47:36 瀏覽:284
壓縮袋打折 發布:2025-02-08 11:46:02 瀏覽:257
c語言結構體題目 發布:2025-02-08 11:46:01 瀏覽:336
如何svn限制一些外網不能訪問 發布:2025-02-08 11:46:00 瀏覽:990
伺服器外網ip咋配置 發布:2025-02-08 11:42:19 瀏覽:640
最優樹演算法 發布:2025-02-08 11:37:19 瀏覽:229
linux保存路由 發布:2025-02-08 11:36:25 瀏覽:557
M合成演算法 發布:2025-02-08 11:26:22 瀏覽:329
大唐無雙冒險腳本 發布:2025-02-08 11:08:36 瀏覽:761