我写了一个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