2012-04-28 1 views
0

Если яИндивидуальные расширения Баш подстановочных

*.c

он будет возвращать список файлов, оканчивающихся .c, разделенный пробелом. Тем не менее, я бы хотел, чтобы он вместо этого возвращал список файлов, с префиксом #include " и с пометкой "\n.

например. Выход

#include "blah.c" 
#include "meh.c" 
#include "hehe.c" 

Я хочу трубы результаты это в gcc -xc - так бонусных очков, если команда является один вкладыш.

(И нет, я не хочу просто cat *.c, потому что он потеряет информацию исходного местоположения)

ответ

2

Там более простой способ:

printf '#include "%s"\n' *.c 
+0

Очень приятно. Что-то вроде этого - именно то, на что я надеялся. – Heptic

2

Может быть что-то вроде

for f in *.c ; do 
    printf '#include "%s"\n' $f 
done | gcc -xc - 

должны делать то, что вы хотите

Однако , gcc принимает несколько исходных файлов, так что вы могли бы просто сделать

gcc -Wall *.c -o yourprog -lyourlibrary 

Вы также могли бы пройти -g -O -flto к gcc

+0

Великий, что делает трюк. Использование нескольких файлов исходного файла gcc несколько отличается, поскольку он компилирует все файлы по отдельности, что означает, что он тратит огромное количество времени на обработку одних и тех же заголовков и снова. (Плюс я не доверяю слишком-слишком) – Heptic

+0

Если каждый ваш файл '* .c' является' # include'-ing * одинаковым * common 'header.h', вы можете предварительно скомпилировать это с помощью' gcc -c header.h -o header.h.gch'; и я не думаю, что заголовки синтаксического анализа представляют собой огромное количество времени для кода C (это может быть так для кода на C++). Вы можете использовать аргумент программы '-ftime-report' для' gcc', чтобы узнать. И '-flto' отлично работает с GCC 4.7! –

1

я не сделал тест, но это может сделать это

для а * .c; do echo '#include "' $ a '"'; сделано | НКА--

+0

Отлично, спасибо, что делает трюк. Я, однако, задал вопрос Базиле, когда он избил вас на минуту: D – Heptic

Смежные вопросы