首页 > 其他分享 >Makefile优化编译速度

Makefile优化编译速度

时间:2023-06-12 11:37:11浏览次数:36  
标签:gcc Makefile 编译 SRCDIR OBJDIR main 优化 hello

  1. 并行编译:使用 make -j 命令来进行并行编译,可以加快编译速度。-j 后面可以跟一个数字,表示并行编译的线程数。

  2. 懒惰计算:使用 .PHONY 规则来避免无谓的重新编译。该规则告诉 make,这个规则不需要实际的文件来作为依赖,每次都要重新执行。例如:

    .PHONY: all
    all: hello.c
    gcc -o hello hello.c
    
  3. 禁止隐式规则:如果你知道你并不需要使用 make 提供的隐式规则,可以使用 .SUFFIXES 规则禁止掉它们。例如:\

.SUFFIXES:
  1. 指定编译器选项:使用 -O 开启编译器优化选项,可以提高程序执行速度。例如:
CFLAGS=-O
all: hello.c
gcc $(CFLAGS) -o hello hello.c
  1. 分离头文件:将头文件和源文件分离,可以避免重复编译,减少编译时间。例如:

    all: hello.o main.o
    gcc -o myprog hello.o main.o
    hello.o: hello.c hello.h
    gcc -c hello.c
    main.o: main.c hello.h
    gcc -c main.c
    
  2. 使用预编译头文件:将常用的头文件编译成单独的预编译头文件,可以加快编译速度。例如:

    all: hello.o main.o
    gcc -o myprog hello.o main.o
    hello.o: hello.c hello.h stdio.h
    gcc -c -include stdio.h hello.c
    main.o: main.c hello.h stdio.h
    gcc -c -include stdio.h main.c
    
  3. 指定输出目录:将目标文件存放在一个独立的目录中,可以避免编译产生的文件污染源代码目录。例如:

OBJDIR=obj
SRCDIR=src
all: $(OBJDIR)/hello.o $(OBJDIR)/main.o
gcc -o myprog $(OBJDIR)/hello.o $(OBJDIR)/main.o
$(OBJDIR)/hello.o: $(SRCDIR)/hello.c $(SRCDIR)/hello.h
gcc -c -o $(OBJDIR)/hello.o $(SRCDIR)/hello.c
$(OBJDIR)/main.o: $(SRCDIR)/main.c $(SRCDIR)/hello.h
gcc -c -o $(OBJDIR)/main.o $(SRCDIR)/main.c

标签:gcc,Makefile,编译,SRCDIR,OBJDIR,main,优化,hello
From: https://www.cnblogs.com/linhaostudy/p/17474552.html

相关文章

  • linux-ssh优化
    1.修改ssh端口vim/etc/ssh/sshd_config#Port22Port20199#指定端口Port20100#ListenAddress0.0.0.0#ListenAddress::2.添加ssh白名单[root@small~]#vim/etc/hosts.allowsshd:10.10.10.sshd:10.241.107.85:allowsshd:10.28.234.124:allowsshd:172.16.2.30:a......
  • PostgreSQL配置优化
    PostgreSQL配置优化PostgreSQL配置优化硬件和系统配置测试工具配置文件主要选项测试数据总结 硬件和系统配置操作系统Ubuntu13.04系统位数64CPUIntel(R)Core(TM)2DuoCPU内存4G硬盘SeagateST2000DM001-1CH164测试工具PostgreS......
  • nginx-rmtp-****,nginx-flv-****的编译相关问题及解决方案
    1.mingW进入命令行  2.编译nginx-rtmp-module-master遇到的问题解决方案参考......
  • VCS+DVE+Verdi+Makefile使用
    业界有三大仿真工具,Synopsis家的VCS、Cadence家的IUS-irun(现在是Xcelium-xrun)和Mentor的Modelsim。VCS的全称是VerilogCompileSimulator,是Synopsis公司的电路仿真工具,可以进行电路的时序模拟。VCS属于编译型verilog仿真器,内部的仿真工具是DVE。VCS先将verilog/systemverilog文......
  • [TSG开发日志2]串口通信?VS下FaroSDK编译环境?一文搞定
    艹,不知道为什么我之前写的法如sdk没有保存,总而言之就是莫名其妙整个工程没有了,后来我想了想,也有可能就是我自己删掉了,因为在配置法如工程的时候遇到了一些小问题,不过现在也解决了。一、关于串口通信:Qt的确有自己的串口通信类,就是QSerialPort,但是我们在使用过程中因为要更加定制......
  • Makefile基础教程(伪目标)
    (文章目录)前言本篇文章将讲解Makefile中的伪目标,Makefile的目标在前面的文章中我们已经讲解了那么这篇文章我们就来讲讲伪目标。一、伪目标概念Makefile伪目标是一类特殊的目标,它们的目的是提供给make工具一些命令,而不是用来构建文件的。因为伪目标通常不会对应实际的文件......
  • Makefile教程(Makefile的结构)
    (文章目录)前言一、Makefile的结构Makefile通常由一系列规则组成,每条规则定义了如何从源文件生成目标文件。每个规则又由目标、依赖和命令三部分组成。下面是Makefile规则的基本结构:target:dependenciescommand1command2...其中,target是要生成的目标文......
  • Makefile教程(入门介绍)
    (文章目录)前言本篇文章将带大家学习Makefile,Makefile在文件的编译中起到重要作用,在Linux中我们也是经常使用到Makefile,下面我将会带大家学习什么是Makefile。一、Makefile介绍Makefile是用于自动化构建程序的一种工具,它通常被用于编译,连接以及打包程序等任务。Makefile利用了......
  • JVM 数据存储介绍及性能优化
    JVM内存模式介绍Java虚拟机内存模型是Java程序运行的基础。为了能使Java应用程序正常运行,JVM虚拟机将其内存数据分为程序计数器、虚拟机栈、本地方法栈、Java堆和方法区等部分。程序计数器(ProgramCounterRegister)程序计数器(ProgramCounterRegister)是一块很小内......
  • Goland 包导入正常,但是无法解析函数和成员属性,编译不报错
    这段时间Goland突然出现了一个毛病,每次goget依赖后,虽然依赖拉下来了,但是代码里使用了这个module的地方无法引用出他的成员和属性,大片的标红,都提示「Unresolvedreference'xxxxx'」,但是只要把项目关了,重新打开,再次触发module的index索引动作,就恢复正常了。本来想看看有没......