加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

關(guān)于Makefile自動生成-autotools的使用

07/25 15:25
849
閱讀需 13 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

Linux應(yīng)用開發(fā)中,編寫Makefile是一項必備技能,因為它定義了工程中所有文件的編譯順序、規(guī)則和依賴關(guān)系,決定了哪些文件需要編譯以及它們的編譯順序。

雖然對初級開發(fā)者而言,編寫復(fù)雜的Makefile并非日常任務(wù),但遇見需要構(gòu)建大型軟件項目時,利用工具自動生成Makefile就顯得尤為關(guān)鍵。接下來,我們將重點介紹一款自動化構(gòu)建工具——Autotools,幫助開發(fā)者高效地管理項目構(gòu)建流程。

1、安裝需要工具

elf@ubuntu:~/work$ sudo apt-get install automake

2、測試程序編寫

elf@ubuntu:~/work/autotools$ vi main.c

#include <stdio.h>
#include <string.h>
#include <hello.h>
int main(void)
{
print();
return 0;
}
寫好之后保存退出。
elf@ubuntu:~/work/autotools$ vi hello.c
#include <stdio.h>
#include <string.h>
void print(void)
{
printf("Hello,ElfBoard!n");
}
寫好之后保存退出。

elf@ubuntu:~/work/autotools$ vi hello.h

#ifndef __HELLO_H__
#define __HELLO_H__
void print(void);
#endif

寫好之后保存退出。

3、使用autoscan工具生成configure.scan 文件

autoscan將生成一個名為configure.scan的文件,其中包含了自動掃描到的可能需要配置的信息。

elf@ubuntu:~/work/autotools$ autoscan
elf@ubuntu:~/work/autotools$ ls
autoscan.log configure.scan hello.c hello.h main.c

4、修改configure.ac文件

將configure.scan文件重命名為configure.ac,然后進一步編輯該文件。開發(fā)者通常會添加更多的配置檢查和必要的宏定義,以確保生成的configure 腳本能夠正確地檢測和配置系統(tǒng)環(huán)境。

elf@ubuntu:~/work/autotools$ mv configure.scan configure.ac

修改?configure.ac

AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])

修改為

AC_INIT(main,0.0.1, [bug@sounos.org])
其中:
FULL-PACKAGE-NAME為程序名稱,
VERSION為當(dāng)前版本,
BUG-REPORT-ADDRESS為bug匯報地址。

然后添加兩句話

AM_INIT_AUTOMAKE
AC_CONFIG_FILES([Makefile])
  • AM_INIT_AUTOMAKE宏用于初始化automake,告訴autotools使用automake工具來管理生成的Makefile。
  • AC_CONFIG_FILES宏告訴autotools生成哪些文件。在這種情況下,它指定生成一個名為Makefile 的文件。

修改完成的configure.ac如下:

# -*- 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_INIT(main,0.0.1, [bug@sounos.org])
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([hello.h])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
AC_CHECK_HEADERS([string.h])
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

5、執(zhí)行aclocal

執(zhí)行aclocal命令會生成aclocal.m4文件,這個文件包含了用于自動配置和構(gòu)建軟件的宏定義和規(guī)則。

elf@ubuntu:~/work/autotools$ aclocal
elf@ubuntu:~/work/autotools$ ls
aclocal.m4 autom4te.cache autoscan.log configure.ac hello.c hello.h main.c

6、autoconf

autoconf命令根據(jù)configure.ac文件生成configure腳本。

elf@ubuntu:~/work/autotools$ autoconf
elf@ubuntu:~/work/autotools$ ls
aclocal.m4 autom4te.cache autoscan.log configure configure.ac hello.c hello.h main.c

7、autoheader

autoheader命令用于生成config.h.in文件。這個文件是由configure.ac中的一些宏命令生成的模板文件,它包含了預(yù)處理器定義和配置選項,會在configure腳本執(zhí)行時生成最終的config.h文件。

elf@ubuntu:~/work/autotools$ autoheader
elf@ubuntu:~/work/autotools$ ls
aclocal.m4 autom4te.cache autoscan.log config.h.in configure configure.ac hello.c 
hello.h main.c

8、制作Makefile.am

Makefile.am是用來描述源代碼和生成目標之間依賴關(guān)系的Automake規(guī)則文件

elf@ubuntu:~/work/autotools$ vi Makefile.am
AUTOMAKE_OPTIONS= foreign
bin_PROGRAMS= main
main_SOURCES= main.c hello.c

9、automake --add-missing

automake --add-missing命令會根據(jù)Makefile.am文件生成Makefile.in文件。

elf@ubuntu:~/work/autotools$ automake --add-missing
configure.ac:12: installing './compile'
configure.ac:7: installing './install-sh'
configure.ac:7: installing './missing'
Makefile.am: installing './depcomp'
elf@ubuntu:~/work/autotools$ ls
aclocal.m4 autom4te.cache autoscan.log compile config.h.in configure configure.ac 
depcomp hello.c hello.h install-sh main.c Makefile.am Makefile.in missing

10、./configure --host=arm

./configure --host=arm命令會生成Makefile文件。

elf@ubuntu:~/work/autotools$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setupcortexa7hf-neon-poky-linux-gnueabi
elf@ubuntu:~/work/autotools$ ./configure --host=arm

11、make生成可執(zhí)行文件

elf@ubuntu:~/work/autotools$ make
elf@ubuntu:~/work/autotools$ ls
aclocal.m4 autoscan.log config.h config.log configure depcomp hello.h install-sh 
main.c Makefile Makefile.in stamp-h1
autom4te.cache compile config.h.in config.status configure.ac hello.c hello.o main 
main.o Makefile.am missing

12、將可執(zhí)行文件拷貝到板子中運行

elf@ubuntu:~/work/autotools$ scp main root@192.168.5.98:/home/root/
root@ELF1:~# ./main 
Hello,ElfBoard!

執(zhí)行應(yīng)用終端打印“Hello,ElfBoard”應(yīng)用可以正常運行,這證明使用autotools工具生成Makefile是沒有問題的。

至此,就完成了Makefile自動生成利器—autotools的運用的介紹。衷心期望這些知識能為正在屏幕前閱讀的你帶來實質(zhì)性的幫助,激發(fā)你在軟件工程領(lǐng)域不斷探索與創(chuàng)新。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
TJA1051T/3/2Z 1 NXP Semiconductors Interface Circuit
$9.33 查看
AFBR-5803ATZ 1 Broadcom Limited Transceiver, 1270nm Min, 1380nm Max, 125Mbps(Tx), 125Mbps(Rx), ST Connector, Through Hole Mount, ROHS COMPLIANT, SIP-9

ECAD模型

下載ECAD模型
$34.2 查看
ABM11AIG-40.000MHZ-4Z-T3 1 Abracon Corporation CRYSTAL 40MHZ 10PF SMD
$1.44 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜