首页 > 其他分享 >C Makefile 写法

C Makefile 写法

时间:2022-11-09 17:24:55浏览次数:46  
标签:gcc enable thread -- Makefile util proce 写法

c语言编译过程

# 预处理 -> 编译 -> 汇编 -> 链接

# 预处理: 将头文件替换中内容全部替换成实际内容 (.i 结尾), 不会检查错误
示例: gcc -E hello.c -o hello.i
# 编译: 检查错误,生成汇编文件 (.s 结尾)
示例: gcc -S hello.i -o hello.s
# 汇编: 将汇编文件编译成二进制文件 (.o 结尾)
示例: gcc - c hello.s -o hello.o
# 编译: 将各个文件的二进制文件链接起来生成可执行文件
示例: gcc hello.o xxx.o ... -o hello

使用make的好处

如果你是对自己的代码很熟悉的话, 体量比较小, 使用脚本控制gcc 编译也是可以的

  1. 主要它本身有一套很灵活的机制, 当代码体量很大的时候使用make能够更加体现出它的便捷之处
  2. 增量编译: 使用makefile可以只对已修改的文件做编译,不过前提是要保留之前编译的 .o 文件

makefile 写法示例

progName= StorgProg
# 将 .o 文件放在 build 文件夹中
objects	= main.o logger.o thread_recvcmd.o util-files.o util_mmap.o util-gpio.o util-keepoff.o util-string.o thread_manager.o sys_resource.o common.o stru_queue.o sys_init.o drv_pcie.o pcie_proce.o vlan_proce.o info_apper.o oper_device.o
run:	$(objects)
	cc -o StorgProg -g  -w -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE -pthread -lm $(objects)

# .o 文件为中间文件,当增量编译时需要保留 .o 文件
main.o:			  	main.c 
logger.o:		 	logger.c logger.h
thread_recvcmd.o: 	thread_recvcmd.c thread_recvcmd.h
util-files.o:		util-files.c util-files.h
util_mmap.o:		util_mmap.c util_mmap.h
util-gpio.o:		util-gpio.c util-gpio.h
util-keepoff.o:		util-keepoff.c util-keepoff.h
util-string.o:		util-string.c util-string.h
thread_manager.o:	thread_manager.c thread_manager.h
sys_resource.o:		sys_resource.c sys_resource.h
common.o:			common.c common.h
stru_queue.o:		stru_queue.c stru_queue.h
sys_init.o:			sys_init.c sys_init.h
drv_pcie.o:			drv_pcie.c drv_pcie.h
pcie_proce.o:		pcie_proce.c pcie_proce.h
vlan_proce.o:		vlan_proce.c vlan_proce.h
info_apper.o:		info_apper.c info_apper.h
oper_device.o:		oper_device.c oper_device.h

clean:
	-rm -rf $(objects)

cleanAll: 
	-rm -rf $(objects)
	-rm -rf StorgProg

系统,gcc,make版本

系统版本: Centos8

[root@node2]# cat /proc/version
Linux version 4.18.0-305.3.1.el8.x86_64 ([email protected]) (gcc version 8.4.1 20200928 (Red Hat 8.4.1-1) (GCC)) #1 SMP Tue Jun 1 16:14:33 UTC 2021
[root@node2]# gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
目标:x86_64-redhat-linux
配置为:../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
线程模型:posix
gcc 版本 8.4.1 20200928 (Red Hat 8.4.1-1) (GCC)
[root@node2]# make -v
GNU Make 4.2.1
为 x86_64-redhat-linux-gnu 编译
Copyright (C) 1988-2016 Free Software Foundation, Inc.
许可证:GPLv3+:GNU 通用公共许可证第 3 版或更新版本<http://gnu.org/licenses/gpl.html>。
本软件是自由软件:您可以自由修改和重新发布它。
在法律允许的范围内没有其他保证。

标签:gcc,enable,thread,--,Makefile,util,proce,写法
From: https://www.cnblogs.com/han-guang-xue/p/16874472.html

相关文章

  • 大小写字符转换【Sql Server和C#两种写法】
    案例:VarStr=”abdCnd“如何将Str=”ABDCND“?SqlServer写法:upper(Str)  ==> Lower(Str)   C#写法:Str.toUpper() ==>Str.toLower() ......
  • Linux命令基础——makefile+gdb+IO
    在学习Linux命令基础总结了笔记,并分享出来。08-linux-day03(makefile-gdb-IO)目录:附:ftp工具介绍——FlashFXP一、学习目标二、makefile1、makefile编写12、makefile编写23、......
  • 渲染到RenderTexture的2种写法
    第1种staticvoidTest(){Texture2DsrcTex=null;varsrcTempRT=RenderTexture.GetTemporary(512,512,0,RenderTextureFormat.Default);Graphic......
  • 跳转路由地址url写法
    uniapp跳转//页面路径user/pages/addressList/index?id=198213b479b54cbcaf2b5dcd79a92f94//函数代码letid=198213b479b54cbcaf2b5dcd79a92f94;uni.navigateTo({'user/pa......
  • Makefile 学习二:命令和变量
    你必须非常努力,才能看起来毫不费力!微信搜索公众号[漫漫Coding路],一起FromZeroToHero!前言在Go语言开发中,我们希望能够规范代码风格,每个成员在提交时可以一键格......
  • Makefile.win recipe for target '项目1.exe' failed
    在运行代码的时候出现了这个问题,查阅了许多资料,有的说是编译器的问题,有的说是重复定义变量名称的问题,在对代码检查后发现不是这两者的问题是我前面数组定义有问题,将数组定义......
  • 005.application.properties配置文件的俩种写法
    1.种配置文件区分  2.格式转化的网站  3.使用(application.properties中编写)3.1 配置端口号、项目名字、公共前缀server.port=8081spring.application.name......
  • 单例写法,双重检查
    publicstaticConversionServicegetSharedInstance(){ApplicationConversionServicesharedInstance=ApplicationConversionService.sharedInstance;if(sha......
  • vue2搭配vue-router3真正可用不报错的写法格式
    这里要吐槽下vue和vue-router的文档教程本身前端的版本就多,版本之间还各种不兼容,用法函数还多种多样,一会这个组件一会那里是按普通渲染,简直让人不知道按哪个才是对的。然......
  • Vue 三 el与data的两种写法
    data与el的2种写法1.el有2种写法(1).newVue时候配置el属性。(2).先创建Vue实例,随后再通过vm.$mount('#root')指定el的值。......