使用autotools编译发布hello.c

1、autotools简介

GNU Autotools 是一套用于创建可移植和易于维护的软件项目的工具集。它们主要用于生成配置脚本 (configure) 和 Makefiles,使得软件能够在不同的 Unix-like 系统上顺利编译和安装。

其中可移植,为在不同的Unix-like系统上。

官方文档:Autoconf

2、组件的使用流程

其中带星号的为使用组件。

3、示例:编译发布hello.c

  1. 创建简单的hello.c

    复制代码
    #include<stdio.h>
    
    int main()
    {
            printf("hello world!\n");
            return 0;
    }
  2. 使用autoscan,产生configure.scan,将configure.scan更改后缀名configure.ac(用于环境检测),此时在更改configure.ac文件内容。

    复制代码
    #                                               -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.
    
    AC_PREREQ([2.71])
    #初始化:包名,版本,出错发送邮箱
    AC_INIT([hello], [1.0], [1919441076@qq.com])
    #检查源代码目录是否正确
    AC_CONFIG_SRCDIR([hello.c])
    #配置头文件
    AC_CONFIG_HEADERS([config.h])
    #编译的选项和特性,如开启编译器警告、是否遵循GUN标准
    AM_INIT_AUTOMAKE(-Wall -Werror foreign)
    #指定生成的配置文件
    AC_CONFIG_FILES([Makefile])
    # Checks for programs.
    AC_PROG_CC
    
    # Checks for libraries.
    
    # Checks for header files.
    
    # Checks for typedefs, structures, and compiler characteristics.
    
    # Checks for library functions.
    
    AC_OUTPUT
  3. 使用指令aclocal,生成aclocal.m4文件(宏展开,支持自定义,如交叉编译)。

  4. 使用指令autoheader生成config.h.in文件(in后缀的皆为中间文件,为后面文件的输入)。

  5. 使用指令autoconf生成configure可执行文件。

  6. 创建Makefile.am并编写(构建逻辑)

    复制代码
    #用于指定需要编译并安装到系统 bin 目录
    bin_PROGRAMS = hello
    #指定生成某个目标文件所需源文件列表的变量命名约定
    hello_SOURCES = hello.c
  7. 使用指令automake生成Makefile.in文件

  8. 运行前面生成的脚本configure指令生成Makefile文件和config.h文件。

  9. 使用make生成可执行文件,使用make dist生成源码包。

相关推荐
郝亚军2 小时前
ubuntu通过samba,让win11可以访问其共享文件夹
linux·服务器·ubuntu
一个人旅程~2 小时前
旧电脑的“拯救者”?Linux Mint20.3是怎样适配软件硬件以及兼顾兼容与性能的平衡的?
linux·经验分享·电脑
小夏子_riotous3 小时前
Docker学习路径——3、常用命令
linux·运维·服务器·学习·docker·容器·centos
其实防守也摸鱼3 小时前
无线网络安全---WLAN相关安全工具--kali(理论附题目)
linux·安全·web安全·学习笔记·kali·命令模式·wlan
uesowys5 小时前
CentOS Linux安装部署OpenClaw
linux·centos·安装部署openclaw
IMPYLH5 小时前
Linux 的 rm 命令
linux·运维·服务器·网络·bash
YIN_尹5 小时前
【Linux系统编程】进程地址空间
linux·c++
代码中介商6 小时前
手把手教你Linux 打包压缩与 gcc 编译详解
linux·运维·服务器·编译·打包·压缩
longerxin20206 小时前
阿里云AlmaLinux操作系统允许root登录配置步骤
linux·服务器·阿里云
独小乐7 小时前
019.ADC转换和子中断|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·mcu·arm