在Linux中,Makefile是一个用于编译和链接程序的工具,它是一个文本文件,其中包含了一系列的规则和指令,用于描述如何从源代码文件生成可执行文件或库文件,Makefile的主要作用是自动化编译过程,使得程序员可以更加专注于代码的编写,而不需要关心编译的具体细节。
创新互联公司-专业网站定制、快速模板网站建设、高性价比尚义网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式尚义网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖尚义地区。费用合理售后完善,十载实体公司更值得信赖。
Makefile的基本结构如下:
1、变量定义:在Makefile中,可以使用变量来存储一些常量或者需要多次使用的值,变量的定义和使用格式如下:
变量名 = 值
CC = gcc CFLAGS = -Wall -g
2、目标定义:目标是指要生成的文件,通常是可执行文件或库文件,目标的定义格式如下:
目标: 依赖项 命令
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、隐含规则:Makefile中有一些预定义的规则,用于处理常见的文件类型,这些规则不需要显式地列出,而是自动应用到相应的目标和依赖项上,对于.c
文件,Makefile会自动调用$(CC) $(CFLAGS) -c $< -o $@
命令进行编译;对于.o
文件,Makefile会自动调用$(CC) $(CFLAGS) -c $< -o $@
命令进行编译;对于可执行文件,Makefile会自动调用$(CC) $(LDFLAGS) $^ -o $@
命令进行链接。
5、伪目标:伪目标是指没有对应实体的目标,通常用于表示一组相关的目标,伪目标的定义格式如下:
.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 *.
新闻标题:linux中的makefile是什么
分享网址:http://www.shufengxianlan.com/qtweb/news35/409985.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联