2011-04-05 140 views
1
中列出的文档

我写了一个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中工作,但在命令行界面中失败,而第二个在相反的方向工作。我怎样才能解决这个问题?

回答

2

您知道吗-M flag of gcc? (有几个选项都以-M开头,你可以在哪里定义哪些依赖关系 - 这个调用与以后的编译无关,不会生成代码/目标文件只是解析代码)

+0

这看起来很有用我的脚本部分是不需要的......我会看看-M标志,然后返回这里以防万一遇到任何问题。 – 71GA 2011-04-05 13:33:42

+0

所以这样我可以使用命令“arm-none-eabi-gcc -W $ LDFILE”(LDFILE是一个包含objects_list的变量)。然后我得到所有目标文件的makefile依赖关系。现在我只需要将命令编译(arm-none-eabi-gcc -c)这些依赖关系之间的对象。任何想法如何做到这一点? – 71GA 2011-04-06 09:32:31

+0

你好,我已经看过它,并设法创建.c文件的依赖列表,但我如何创建.s(程序集)文件的依赖列表?使用-M选项总是给我一个空的输出。 – 71GA 2011-04-07 18:50:53

相关问题