Команда оболочки Linux для чтения текстового файла и открытия документов, перечисленных в - PullRequest
1 голос
/ 05 апреля 2011

Я написал скрипт оболочки (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-файле, но не работает в интерфейсе командной строки, тогда как второй работает наоборот.Как я могу это исправить?

1 Ответ

2 голосов
/ 05 апреля 2011

Вы знаете -M флаг gcc? (Есть несколько опций, начинающихся с -M, где вы можете определить, куда записывать, какие зависимости - этот вызов не зависит от последующей компиляции, код / ​​объектные файлы не будут генерироваться, это просто анализ deps)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...