介绍

Linux中的./configure,make到底在干嘛?
  1. ./configure
    configure是一个脚本,由autoconf自动生成,用于检测当前系统环境是否满足安装所需条件。它最终会生成makefile文件
  2. make
    make是一个命令,使用makefile进行编译源码
  3. make install
    表示运行"目标为install的make命令",也就是将编译后的结果赋值到相应目录里

AutoTools

  • autoscan
  • aclocal
  • autoconf
  • autoheader
  • automake

使用例子

  1. 创建目录并进入
mkdir helloAutoConf
cd helloAutoConf

image.png

  1. 创建main.c文件
#include <stdio.h>

int main(){

   printf("hello world\n");
   return 0;
}

image.png

  1. autoscan扫描

image.png

  1. 将生成的configure.scan改名为configure.ac

image.png

  1. 编辑configure.ac文件

image.png

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(1.0)
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
  1. aclocal,生成acclocal.m4文件

image.png

  1. autoconf,生成configure脚本

image.png

  1. autoheader,生成config.h.in文件

image.png

  1. 创建Makefile.am文件
bin_PROGRAMS=hello
hello_SOURCES=main.c

image.png

  • bin_PROGRAMS =

bin_PROGRAMS用于指定要生成的可执行程序文件,可执行文件在安装时需要被安装到系统中,如果不想要安装到系统中,需要用noinst_PROGRAMS来代替

  • xxx_SOURCES =

xxx_SOURCES表示生成可执行应用程序所用的源文件,这里注意,xxx_是由前面的bin_PROGRAMS指定的,如果前面是生成example,那么这里就是example_SOURCES,其它的类似标识也是一样

  • xxx_CPPFLAGS =

xxx_CPPFLAGS 这和Makefile文件中一样,表示C语言预处理参数

  • xxx_LDFLAGS =

xxx_LDFLAGS 连接的时候所需库文件的标识,这个也就是对应一些如-l,-shared等选项

  • noinst_HEADERS =

这个表示该头文件只是参加可执行文件的编译,而不用安装到安装目录下。如果需要安装到系统中,可以用include_HEADERS来代替

  • INCLUDES =

INCLUDES 定义链接时所需要的头文件及引用的头文件目录

  • xxx_LDADD =

xxx_LDADD 定义链接时所需要的库文件

  1. automake --add-missing

image.png

  1. 创建缺失文件夹

image.png

  1. automake --add-missing

image.png

  1. ./configure

image.png

  1. make

image.png

  1. ./hello

image.png


点墨
26 声望3 粉丝

全栈前端开发工程师