我寫了一個shell腳本(bin/bash)。該腳本查看文件夾的啓動,源和對象都位於當前文件夾中。然後它使列表(文本文件)名爲startup_list(包括具有擴展名的文件),sources_list(文件的擴展名爲.c)和objects_list(包括擴展名爲.o的文件)。我們將所有.s文件分配給變量ASFILE,將所有.c文件分配給GCCFILE,並將所有.o分配給LDFILE。Linux shell命令讀取文本文件並打開
ASDIR="$(pwd)/startup"
GCCDIR="$(pwd)/source"
LDDIR="$(pwd)/objects"
INCDIR="$(pwd)/include"
ls $ASDIR/*.s > startup_list
sed -i 's|..*/||g' startup_list
ASFILE=$(cat startup_list)
ls $GCCDIR/*.c > sources_list
sed -i 's|..*/||g' sources_list
GCCFILE=$(cat sources_list)
cat startup_list sources_list > objects_list
sed -e 's/\.c/\.o/g' objects_list > objects_list_tmp
sed -e 's/\.s/\.o/g' objects_list_tmp > objects_list
LDFILE=$(cat objects_list)
該腳本將被整合到一個makefile文件後,但我現在需要一個殼COMAND打開.c文件一個又一個檢查什麼的#include命令後面列出的依賴關係。還有一件事。文本文件startup_list,sources_list和object_list在每行中列出一個文件。它看起來像這樣:
ea3131_startup_entry.c
pad.c
ea3131_board.c
lpc313x_cgu_default.c
lpc313x_cgu_driver.c
lpc313x_dma_driver.c
lpc313x_evt_driver.c
如果我省略命令
sed -i 's|..*/||g' sources_list
sed -i 's|..*/||g' startup_list
我還可以得到在它前面的文件的絕對路徑,所以文本文件看起來像這樣:
/home/ziga/Dropbox/diploma/86x_linux/IDE_eclipse/eclipse_projects/LPC3141_SHELL_timer_makefile/startup/ea3131_startup_entry.c
/home/ziga/Dropbox/diploma/86x_linux/IDE_eclipse/eclipse_projects/LPC3141_SHELL_timer_makefile/startup/pad.c
/home/ziga/Dropbox/diploma/86x_linux/IDE_eclipse/eclipse_projects/LPC3141_SHELL_timer_makefile/source/ea3131_board.c
/home/ziga/Dropbox/diploma/86x_linux/IDE_eclipse/eclipse_projects/LPC3141_SHELL_timer_makefile/source/lpc313x_cgu_default.c
/home/ziga/Dropbox/diploma/86x_linux/IDE_eclipse/eclipse_projects/LPC3141_SHELL_timer_makefile/source/lpc313x_cgu_driver.c
那麼我在這裏有什麼選擇?我如何打開這些.c文件並檢查我需要檢查的內容?
問候Ziga
這裏是我的全部的makefile我沒有寫把你的意見。它尚未完成。我仍然需要添加編譯* .c文件的行。
#!/bin/bash
# najprej nastavimo shell, ki je v nasem primeru bash
# nastavitev asemblerja, compilerja in linkerja
AS="arm-none-eabi-as"
GCC="arm-none-eabi-gcc"
LD="arm-none-eabi-ld"
# nastavitev nastavitev za asembler, compiler in linker
ASOPT="-mcpu=arm926ej-s -c -Wall"
GCCOPT="-mcpu=arm926ej-s -c -Wall"
LDOPT="-Tldscript_iram_gnu.ld"
# nastavitev direktorij v katerih se nahajajo kljucne datoteke za sestavo programa
ASDIR="$(pwd)/startup"
GCCDIR="$(pwd)/source"
LDDIR="$(pwd)/objects"
INCDIR="$(pwd)/include"
# potrebno je locirati vse startup, source in objektne datoteke. Ker objektnih datotek še ni, jih je potrebno sproti narediti in jih vse premakniti v mapo objects
ls $ASDIR/*.s > startup_list
sed -i 's|..*/||g' startup_list
ASFILE=$(cat startup_list)
ls $GCCDIR/*.c > sources_list
sed -i 's|..*/||g' sources_list
GCCFILE=$(cat sources_list)
cat startup_list sources_list > objects_list
sed -e 's/\.c/\.o/g' objects_list > objects_list_tmp
sed -e 's/\.s/\.o/g' objects_list_tmp > objects_list
LDFILE=$(cat objects_list)
all: executable
executable: $(LDFILE)
$(GCC) -M $(LDFILE)
clean:
rm startup_list sources_list objects_list objects_list_tmp
echo Pocistili ste vse datoteke.
出於某種原因,當我運行「make」或「使清潔」命令,我得到一個錯誤:
makefile:21: *** missing separator. Stop.
我不知道我做錯了,但我認爲我不很明白如何正確使用makefile中的bash命令,特別是變量。有時我用它們作爲$(BOO),有時候用$ BOO。第一個在makefile中工作,但在命令行界面中失敗,而第二個在相反的方向工作。我怎樣才能解決這個問題?
這看起來很有用我的腳本部分是不需要的......我會看看-M標誌,然後返回這裏以防萬一遇到任何問題。 – 71GA 2011-04-05 13:33:42
所以這樣我可以使用命令「arm-none-eabi-gcc -W $ LDFILE」(LDFILE是一個包含objects_list的變量)。然後我得到所有目標文件的makefile依賴關係。現在我只需要將命令編譯(arm-none-eabi-gcc -c)這些依賴關係之間的對象。任何想法如何做到這一點? – 71GA 2011-04-06 09:32:31
你好,我已經看過它,並設法創建.c文件的依賴列表,但我如何創建.s(程序集)文件的依賴列表?使用-M選項總是給我一個空的輸出。 – 71GA 2011-04-07 18:50:53