新聞中心
在Linux中,Makefile是一個用于編譯和鏈接程序的工具,它是一個文本文件,其中包含了一系列的規(guī)則和指令,用于描述如何從源代碼文件生成可執(zhí)行文件或庫文件,Makefile的主要作用是自動化編譯過程,使得程序員可以更加專注于代碼的編寫,而不需要關(guān)心編譯的具體細節(jié)。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比尚義網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式尚義網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋尚義地區(qū)。費用合理售后完善,十載實體公司更值得信賴。
Makefile的基本結(jié)構(gòu)如下:
1、變量定義:在Makefile中,可以使用變量來存儲一些常量或者需要多次使用的值,變量的定義和使用格式如下:
變量名 = 值
CC = gcc CFLAGS = -Wall -g
2、目標定義:目標是指要生成的文件,通常是可執(zhí)行文件或庫文件,目標的定義格式如下:
目標: 依賴項
命令
main: main.o foo.o bar.o
gcc $(CFLAGS) -o main main.o foo.o bar.o
3、依賴項:依賴項是指目標所依賴的文件,如果依賴項中的任何一個文件比目標文件新,那么目標文件就需要重新生成,依賴項可以是其他目標,也可以是文件,依賴項的格式如下:
目標: 依賴項1 依賴項2 ...
main: main.o foo.o bar.o
gcc $(CFLAGS) -o main main.o foo.o bar.o
4、隱含規(guī)則:Makefile中有一些預(yù)定義的規(guī)則,用于處理常見的文件類型,這些規(guī)則不需要顯式地列出,而是自動應(yīng)用到相應(yīng)的目標和依賴項上,對于.c文件,Makefile會自動調(diào)用$(CC) $(CFLAGS) -c $< -o $@命令進行編譯;對于.o文件,Makefile會自動調(diào)用$(CC) $(CFLAGS) -c $< -o $@命令進行編譯;對于可執(zhí)行文件,Makefile會自動調(diào)用$(CC) $(LDFLAGS) $^ -o $@命令進行鏈接。
5、偽目標:偽目標是指沒有對應(yīng)實體的目標,通常用于表示一組相關(guān)的目標,偽目標的定義格式如下:
.PHONY: 偽目標名
.PHONY: all clean
6、條件判斷:Makefile中可以使用if、else、endif等語句進行條件判斷,條件判斷的格式如下:
ifeq ($(條件), $(值))
命令1
else ifeq ($(條件), $(值))
命令2
else ifeq ($(條件), $(值))
命令3
else
默認命令
endif
ifeq ($(CC), gcc)
CFLAGS += -std=c99
else ifeq ($(CC), clang)
CFLAGS += -std=c11 -Wno-unused-parameter
else ifeq ($(CC), icc)
CFLAGS += -std=c11 -Wno-unused-function -Wno-unused-variable -Wno-unused-value -Wno-unused-const-variable -Wno-unused-but-set-variable -Wno-strict-aliasing -Wno-pointer-sign -Wno-format-security -Wno-format-truncation -Wno-format-overflow -Wno-int-in-bool-context -Wno-implicit-fallthrough -Wno-shift-negative-value -Wno-shift-overflow -Wno-missing-field-initializers -Wno-packed -Wno-redundant-decls -Wno-variadic-macros -Wno-address -Wno-enum-compare -Wno-enum-conversion -Wno-deprecated-declarations -Wno-unused-local-typedefs -Wno-unused-function -Wno-unused-result -Wno-unused-variable -Wno-unused-const-variable -Wno-unused-label -Wno-unused-value -Wno-uninitialized -Wno-unknown-warning-option -Wno-pragmas -Wno-invalid-pch -Wno-long-long -Wno-variadic-macros -fdiagnostics-show-option -fdiagnostics-color=always -faligned-new -faligned-malloc -faligned-realloc -faligned-functions -fstrict-aliasing -fstrict-overflow=5 -finline-functions -ffast-math -fgcse --param inline_unit_growth=1000 --param max_inline_insns_single=400 --param large_function_growth=1000000 --param min_inline_threshold=800 --param max_inline_threshold=30000 --param finline_limit=10000 --param vect_min_kernel_ratio=1 --param vect_max_kernel_ratio=75 --param max_vectorize_loop_nesting=40 --param max_pipeline_depth=600 --param maksimum_number_of_threads=64 --param force_cpusubtype_ALLYES --param clwb_cannot_force=0 --param disable_ipa_cp_load_opt=1 --param disable_ipa_cp_preopt=1 --param disable_ipa_cp_postopt=1 --param disable_ipa_icf=1 --param disable_ipa_lto=1 --param enable_ipa_rtl=1 --param enable_ipa_cp=1 --param enable_ipa_aa=1 --param enable_ipa_dsra=1 --param enable_ipa_copyrename=1 --param enable_ipa_folding=1 --param enable_ipa_aggressive_inlining=1 --param enable_ipa_vectorization=1 --param enable_ipa_new_pm=1 --param enable_ipa_licm=1 --param enable_ipa_sra=1 --param enable_ipa_trace=1 --param enable_ipa_ira=1 --param enable_ipa_autoeh=1 --param enable_ipa_simplifylibcalls=1 --param enable_ipa_fixdataraces=1 --param enable_ipa_pr69475=1 --param enable_ipa_pr69475_vect=1 --param enable_ipa_pr69475_ptrauth=1 --param enable_ipa_pr69475_ptrauth2=1 --param enable_ipa_pr69475_ptrauth3=1 --param enable_ipa_pr69475dce=1 --param enable_ipa_pr69475dce2=1 --param enable_ipa_pr69475dce3=1 --param enable_ipa_pr69475dce4=1 --param enable_ipa_pr69475dce5=1 --param enableallwarnings CFLAGS=-g3 CXXFLAGS=-g3 CPPFLAGS=-g3 FFLAGS=-g3 INCLUDE=-I/usr/local/include LIBRARY=-L/usr/local/lib LIBS=-lgfortran F90FLAGS=-g3 F95FLAGS=-g3 F77FLAGS=-g3 CC="gcc" CXX="g++" CPP="cpp" F77="gfortran" F90="gfortran" F95="gfortran" asm="as" ar="ar" ranlib="ranlib" strip="strip" nm="nm" objdump="objdump" libtool="libtool" makeinfo="makeinfo" gdb="gdb" dwarfdump="dwarfdump" readelf="readelf" size="size" strings="strings" ldd="ldd" pwd="/home/user" MAKEINFO="/usr/bin/makeinfo" RANLIB="/usr/bin/ranlib" AR="/usr/bin/ar" AS="/usr/bin/as" CC="gcc" CXX="g++" CPP="cpp" F77="gfortran" F90="gfortran" F95="gfortran" asm="as" ar="ar" ranlib="ranlib" strip="strip" nm="nm" objdump="objdump" libtool="libtool" makeinfo="makeinfo"gcc $(CFLAGS) $(LDFLAGS) $^ -o $@ clean: rm *.o main rm *.
網(wǎng)站欄目:linux中的makefile是什么
本文URL:http://www.dlmjj.cn/article/cdiscoc.html


咨詢
建站咨詢
