Linux:编写编译脚本Makefile文件

这篇具有很好参考价值的文章主要介绍了Linux:编写编译脚本Makefile文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、生成可执行文件

1、一个源文件编译
本例子主要区别.c及.cpp文件及编译该文件时使用的编译链。
1).c文件

// testadd.c
#include <stdio.h>
int main() {
   int a = 1;
   int b = 2;
   int sum = a + b;
   printf("sum = %d\n", sum);
   return 0;
}

// Makefie
GXX = g++
CC = gcc
TARGET = testadd
OBJS = testadd.o

testadd:${OBJS}
	${CC } ${OBJS} -o ${TARGET} # 空格处为一个Tap
testadd.o:testadd.c
clean:
	rm -r ${OBJS} ${TARGET} # 空格处为一个Tap

2) .cpp文件

// testadd.cpp

#include <stdio.h>
//#include <iostream>
int main() {
   int a = 1;
   int b = 2;
   int sum = a + b;
   printf("c sum = %d\n", sum);
   //std::cout <<"c ++ sum = " << sum<<std::endl;
   return 0;
}

// Makefile
GXX = g++
CC = gcc
TARGET = testadd
OBJS = testadd.o

testadd:${OBJS}
	${GXX} ${OBJS} -o ${TARGET} # 空格处为一个Tap
testadd.o:testadd.cpp
clean:
	rm -r ${OBJS} ${TARGET} # 空格处为一个Tap

经过以上测试,总结如下:
以.cpp为后缀的文件,为c++代码。代码最好使用C++语言。也可以使用c语言。
a 代码使用c++语言,编译时必须要用g++,不能使用gcc。
b 代码使用c语言,编译时可以使用gcc ,也可以使用g++。

以.c为后缀的文件,为c代码,代码最好使用c语言。
a 代码使用c语言,编译时可以使用g++,也可以使用gcc.
b 代码使用c++语言,编译时,不能使用gcc,也不能使用g++.
既:cpp文件可以使用c语言,c++语言编写。c文件,只能使用c语言编写。

2、 两个源文件,以.cpp文件为例
Linux:编写编译脚本Makefile文件,linux,linux,运维,服务器

// testadd.cpp
#include "add.hpp"
int main() {
   int sum = add(5,8);
   std::cout <<"c ++ sum = " << sum<<std::endl;
   return 0;
}

// add.cpp
#include "add.hpp"
int add(int a, int b) {
    std::cout<<"a = "<<a<<std::endl;
    std::cout<<"b = "<<b<<std::endl;
    return a + b;
}

// add.hpp
#include <iostream>
int add(int a, int b);

// Makefile
GXX = g++
CC = gcc
TARGET = testadd
TARGET_SOURCE = testadd.cpp \
       add.cpp
   
${TARGET}:${TARGET_SOURCE}
	${GXX} -o ${TARGET} ${TARGET_SOURCE}
clean:
	rm -r *.o ${TARGET}

编译指令:make。生成testadd

3、编译成动态库
源代码与实例2相同,Makefile文档如下:

GXX = g++
CC = gcc
TARGET = libadd.so
TARGET_SOURCE = add.cpp 
   
${TARGET}:${TARGET_SOURCE}
	${GXX} -shared -fPIC ${TARGET_SOURCE} -o ${TARGET} 
clean:
	rm -r *.o ${TARGET}

编译指令:make。生成add.so

4、使用动态库
源码与上述源码相同。Makefile文件。

// Makefile
GXX = g++
CC = gcc
TARGET = testadd
TARGET_SOURCE = testadd.cpp
LIBS = /home/lily/cproject/testMakeFile/libs   # so库所在路径
${TARGET}:${TARGET_SOURCE}
	${GXX} -o ${TARGET} ${TARGET_SOURCE} -L${LIBS} -ladd
clean:
	rm -r *.o ${TARGET}

编译指令:make 。生成testadd.
注意:在./testadd 之前,需要添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/lily/cproject/testMakeFile/libs,否则报错找到库文件。
Linux:编写编译脚本Makefile文件,linux,linux,运维,服务器
5、头文件放到include文件夹下,其他不动。Makefile

Linux:编写编译脚本Makefile文件,linux,linux,运维,服务器文章来源地址https://www.toymoban.com/news/detail-669121.html

# Makefile
# Compile as C++11
#add_compile_options(-std=c++11)

# 指定编译器
CXX = g++
CC = gcc

#指定编译选项
CFLAGS = -Wall -g
TARGET = testadd
Src:=$(wildcard *.cpp)
Objs:=$(patsubst %.cpp,%.o, $(Src))
#指定头文件位置
INCLUDES = -I ./include
#指定库文件
LIBS=-L ./libs -ladd

$(TARGET):$(Objs)
	echo $(Objs)
	@mkdir -p output
	$(CXX) $(Objs) $(LIBS) -o output/$(TARGET)

%.o:%.cpp
	$(CXX) $(INCLUDES) $(CFLAGS) -c $< -o $@

clean:
	rm $(Objs)

到了这里,关于Linux:编写编译脚本Makefile文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux 裸机篇(五)】I.MX6ULL BSP工程管理下的 Makefile编写、链接脚本

    文件夹 描述 bsp 存放驱动文件 imx6ul 存放跟芯片有关的文件,比如 NXP 官方的 SDK库文件 obj 存放编译生成的.o 文件 project 存放 start.S 和 main.c 文件,也就是应用文件 行 描述 1~7 定义了一些变量,除了第 2 行以外其它的都是跟编译器有关的,如果使用其它编译器的话只需要修改第

    2023年04月20日
    浏览(48)
  • Linux驱动1:入口与出口、头文件路径、makefile编译

    目录 Linux 驱动两种运行方式 字符设备驱动框架 1、创建目录和编写文件 2、添加头文件路径 3、Makefile编写和解释 4、编译测试 第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启动的时候就会自动运行驱动程序; 第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko),

    2024年02月10日
    浏览(43)
  • 【Linux运维】shell脚本检查服务器内存和CPU利用率

    在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载 将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:

    2024年02月09日
    浏览(67)
  • 基于ubuntu的STM32嵌入式软件开发(四)——应用软件工程的修改、Makefile及编译脚本的编写

            本文主要介绍基于标准库函数移植的STM32的应用软件工程的修改,主要涉及到文件内容修改、Makefile文件编写、编译脚本编写等内容,其中编译脚本是基于arm-none-eabi-gcc的交叉编译器撰写的。程序亲测可以正常编译,生成.bin和.hex的可烧录镜像文件。 1.首先修改 pr

    2023年04月15日
    浏览(47)
  • Linux运维:makefile

    Makefile 是一种用于自动化构建的文件,它描述了一个软件项目的编译规则和依赖关系,并提供了一些工具来自动执行这些规则。 Makefile 的主要作用如下: 自动化编译:通过 Makefile,可以定义项目中的编译规则和依赖关系。这样,当源代码发生变化时,只需要执行 make 命令,

    2024年02月06日
    浏览(34)
  • 【运维】Linux 跨服务器复制文件文件夹

    如果是云服务 建议用内网ip scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来

    2024年02月08日
    浏览(74)
  • Linux:服务器间同步文件的脚本(实用)

    比如有三台服务器, hadoop102、hadoop103、hadoop104 ,且都有 atguigu 账号 循环复制文件到所有节点的相同目录下,且脚本可以在任何路径下使用 1、查看环境变量 2、进入 /home/atguigu/bin 目录 在该目录下创建脚本,则该脚本可以在任何路径下使用,因为,这个路径添加在环境变量中

    2024年04月28日
    浏览(41)
  • 编写Bash脚本程序从记录文件中提取history命令的优化,再介绍linux bash语法和结构

    目        录 一、引言 二、脚本代码实现 三、bash语法和结构 (一)基本语法 1、脚本开始与结束 2、注释 3、变量 4、数据类型 5、控制结构 6、循环控制 7、函数 8、算术运算 9、算术操作符和逻辑操作符 (二)命令相关 1、命令执行 2、命令的执行顺序 3、命令的执行优先级

    2024年01月25日
    浏览(54)
  • linux | vscode | makefile | c++编译和调试

    简单介绍环境: vscode 、centos、 gcc、g++、makefile 简单来说就是,写好项目然后再自己写makefile脚本实现编译。所以看这篇博客的用户需要了解gcc编译的一些常用命令以及makefile语法。在网上看了很多教程,以及官网也看了很多次,最后自己一点多一点摸索,有的些许收获。 首

    2024年02月15日
    浏览(35)
  • Makefile——Linux下C/C++编译方法

    linux下常见的C语言项目相关的文件如下图所示。 通常使用GCC来编译C文件。编译过程为 源文件.c文件 - 预编译成.i文件 - 编译成汇编语言.s - 汇编成.o文件 - 链接成可执行文件 。编译命令为gcc -参数 .c -o 输出文件名称 预处理:将头文件拷贝进.c文件内容中,执行预编译命令。采

    2024年02月03日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包