在Linux應用開發中,編寫Makefile是一項必備技能,因為它定義了工程中所有文件的編譯順序、規則和依賴關系,決定了哪些文件需要編譯以及它們的編譯順序。
雖然對初級開發者而言,編寫復雜的Makefile并非日常任務,但遇見需要構建大型軟件項目時,利用工具自動生成Makefile就顯得尤為關鍵。接下來,我們將重點介紹一款自動化構建工具——Autotools,幫助開發者高效地管理項目構建流程。
1、安裝需要工具
elf@ubuntu:~/work$ sudo apt-get install automake
2、測試程序編寫
elf@ubuntu:~/work/autotools$ vi main.c
#include #include #include int main(void) { print(); return 0; }
寫好之后保存退出。
elf@ubuntu:~/work/autotools$ vi hello.c
#include #include 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,然后進一步編輯該文件。開發者通常會添加更多的配置檢查和必要的宏定義,以確保生成的configure 腳本能夠正確地檢測和配置系統環境。
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為當前版本,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、執行aclocal
執行aclocal命令會生成aclocal.m4文件,這個文件包含了用于自動配置和構建軟件的宏定義和規則。
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命令根據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中的一些宏命令生成的模板文件,它包含了預處理器定義和配置選項,會在configure腳本執行時生成最終的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是用來描述源代碼和生成目標之間依賴關系的Automake規則文件
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命令會根據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生成可執行文件
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、將可執行文件拷貝到板子中運行
elf@ubuntu:~/work/autotools$ scp main root@192.168.5.98:/home/root/
root@ELF1:~# ./main Hello,ElfBoard!
執行應用終端打印“Hello,ElfBoard”應用可以正常運行,這證明使用autotools工具生成Makefile是沒有問題的。
至此,就完成了Makefile自動生成利器—autotools的運用的介紹。衷心期望這些知識能為正在屏幕前閱讀的你帶來實質性的幫助,激發你在軟件工程領域不斷探索與創新。
-
嵌入式
+關注
關注
5068文章
19017瀏覽量
303242 -
開發板
+關注
關注
25文章
4943瀏覽量
97191 -
Makefile
+關注
關注
1文章
125瀏覽量
19161 -
autotools
+關注
關注
0文章
4瀏覽量
6088
發布評論請先 登錄
相關推薦
評論