iT邦幫忙

DAY 24
1

21世紀C語言實作及感想系列 第 24

21世紀C語言之24:Auto Tools

  • 分享至 

  • xImage
  •  

在LINUX下,不管你是32位元,64位元的作業系統,甚至是ARM架構,或其他架構的電腦/筆電,

從源代碼裝套件,裝程式庫,幾乎都是統一的3個指令,

./configure
make
sudo make install

有時候./configure的過程會很很久,會一直偵測系統的特性,或相依套件,這時候筆者很好奇,這些指令稿是怎麼產生的,

怎麼可以執行數百個檢查?

書上,先秀了

一個超級簡單的範例:

if [ -e autodemo ]; then rm -r autodemo; fi
mkdir -p autodemo
cd autodemo
cat > hello.c <<\
"--------------"
#include <stdio.h>
int main(){ printf("Hi.\n"); }

cat > Makefile.am <<\
"--------------"
bin_PROGRAMS=hello
hello_SOURCES=hello.c

autoscan
sed -e 's/FULL-PACKAGE-NAME/hello/' \
-e 's/VERSION/1/'
\
-e 's|BUG-REPORT-ADDRESS|/dev/null|' \
-e '10i\
AM_INIT_AUTOMAKE' \
< configure.scan > configure.ac
touch NEWS README AUTHORS ChangeLog
autoreconf -iv
./configure
make distcheck

產生了一個4659行的configure檔

timloo@timloo-Aspire-8530:~/auto_tools/autodemo$ wc -l *
1039 aclocal.m4
0 AUTHORS
wc: autom4te.cache: 是個目錄
0 autom4te.cache
0 autoscan.log
0 ChangeLog
25 config.h.in
4659 configure

而程式只有2行,

#include <stdio.h>

int main(){ printf("HI.\n);}

額外的補充:

$ if [-e autodemo]; then rm -r autodemo;fi
[-e:無此指令

[和 -e 之間要有空白

$ if [ -e autodemo]; then rm -r autodemo;fi
bash: [: missing `]'

] 和裏面的句子間要有空白。

$ cat > hello.c <<\

"--------------------"
#include <stdio.h>

int main(){ printf("HI.\n);}
> ------------------- (長度不一致,沒法結束編輯程式)


所以本書作者喜歡用cat , sed 來做簡單的編輯器,其實我不太會用,我還是開gVim來編輯檔案。

touch 是產生沒內容有檔名的檔案。


上一篇
21世紀C語言之23 : jsmn (Json 庫)
下一篇
21世紀C語言之25:Auto Tools (2)
系列文
21世紀C語言實作及感想30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言