Я написал скрипт оболочки (bin / bash).Сценарий просматривает папки запуска, источник и объекты, которые находятся в текущей папке.Затем он создает списки (текстовые файлы) с именами startup_list (включает файлы с расширением .s), sources_list (файлы с расширением .c) и objects_list (включает файлыс расширением .o).Мы присваиваем все .s файлы переменной ASFILE, все .c файлы - GCCFILE и все .o - LDFILE.
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 позже, но теперь мне нужна команда оболочки, чтобы открывать .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 файлы и проверить, что мне нужно проверить?
С уважением, Зига
Вот мой полный make-файл, который я написал, принимая ваши советы.Это еще не закончено.Мне все еще нужно добавить строки, которые компилируют * .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" или "make clean", я получаю ошибку:
makefile:21: *** missing separator. Stop.
Я не уверен, что я делаю неправильно, но я не совсем понимаю, как правильно использовать команды bash в make-файле, особенно в переменных.Иногда я использую их как $ (BOO), а иногда как $ BOO.Первый работает в make-файле, но не работает в интерфейсе командной строки, тогда как второй работает наоборот.Как я могу это исправить?