如果我做定製的bash通配符擴展
*.c
它將返回.c
結尾的文件列表,用空格隔開。但是,我希望它返回一個文件列表,其前綴爲#include "
,後綴爲"\n
。
例如輸出
#include "blah.c"
#include "meh.c"
#include "hehe.c"
我想管這個結果爲gcc -xc -
所以獎勵積分如果命令是一個班輪。
(不,我不希望只是cat *.c
,因爲它會失去源位置信息)
如果我做定製的bash通配符擴展
*.c
它將返回.c
結尾的文件列表,用空格隔開。但是,我希望它返回一個文件列表,其前綴爲#include "
,後綴爲"\n
。
例如輸出
#include "blah.c"
#include "meh.c"
#include "hehe.c"
我想管這個結果爲gcc -xc -
所以獎勵積分如果命令是一個班輪。
(不,我不希望只是cat *.c
,因爲它會失去源位置信息)
有一個簡單的方法:
printf '#include "%s"\n' *.c
也許類似
for f in *.c ; do
printf '#include "%s"\n' $f
done | gcc -xc -
應該做你想要什麼
然而,gcc
接受多個源文件,所以你可以做
gcc -Wall *.c -o yourprog -lyourlibrary
你也可以通過-g -O -flto
到gcc
大,該做的伎倆。使用gcc的多源文件有點不同,因爲它編譯的所有文件都是單獨的,這意味着它會浪費大量的時間處理相同的頭文件。 (另外我不太相信-flto太多了) – Heptic 2012-04-28 06:18:59
如果你的每個'* .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
我沒有測試這一點,但是這可能做
了在* .C; echo'#include''$ a''';完成| GCC -xc -
太好了,謝謝你的訣竅。然而,我把這個問題授予巴西爾,因爲他打了一分鐘:D – Heptic 2012-04-28 06:20:28
非常好。像這樣的東西正是我所希望的。 – Heptic 2012-04-28 10:37:26