2012-04-28 43 views
0

如果我做定製的bash通配符擴展

*.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 2012-04-28 10:37:26

2

也許類似

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

應該做你想要什麼

然而,gcc接受多個源文件,所以你可以做

gcc -Wall *.c -o yourprog -lyourlibrary 

你也可以通過-g -O -fltogcc

+0

大,該做的伎倆。使用gcc的多源文件有點不同,因爲它編譯的所有文件都是單獨的,這意味着它會浪費大量的時間處理相同的頭文件。 (另外我不太相信-flto太多了) – Heptic 2012-04-28 06:18:59

+0

如果你的每個'* .c'文件都是'#include' *相同*常見'header.h',你可以用'gcc -c header.h -o header.h.gch';而且我認爲解析頭文件對於C代碼來說不是一個大量的時間(對於C++代碼來說可能是這樣)。你可以使用'-ftime-report'程序參數來查找'gcc'。而且'-flto'與GCC 4.7一起工作良好! – 2012-04-28 06:45:35

1

我沒有測試這一點,但是這可能做

了在* .C; echo'#include''$ a''';完成| GCC -xc -

+0

太好了,謝謝你的訣竅。然而,我把這個問題授予巴西爾,因爲他打了一分鐘:D – Heptic 2012-04-28 06:20:28