2010-08-02 41 views
1

假設您有一個包含大量文件的C項目,並且使用GCC中的-D選項管理大量配置以定義某些標誌。自動觸摸所有使用特定#define的文件(#ifdef foo/#endif)

在我的具體情況,我有這樣的東西文件的加載:

void foo(sometype *x) 
{ 
    do_stuff_with_x(x); 

#ifdef MY_FLAG 
    do_additional_stuff(x); 
#endif 

#ifdef OTHER_FLAG 
    do_some_other_stuff(x); 
#endif 

} 

現在,每當我改變標誌之一,我需要清除的項目,並重新編譯所有的源代碼,因爲我不能選擇touch使用此標誌的文件。

是否有可能,使用Eclipse根據Windows,要做到這一點? 也許是一個Eclipse插件,或其他。

對於Linux,我可能會使用一些grep,findtouch的混合,但在Windows上我不知道。

+0

呃...我錯過了這一點嗎?當然,如果你改變標誌,使用這些標誌的文件是你想要重新編譯的文件? – 2010-08-02 14:03:42

+0

我想要重新編譯這些特定的文件。但是如你所知,* make *只重新編譯已經改變的文件,所以我需要更改所有使用標誌的文件。 我寧願自動做! – Gui13 2010-08-02 15:04:39

回答

1

好了,人的壓力下,我安裝MSYS和使用的命令像這樣的:

$ find . -name "*.c" -or -name "*.h" | xargs grep "MYFLAG" -q -l | xargs touch 

實際上,你可以一些其他的過濾器來find添加到調整更精細的感動文件。

我不知道xargs,在我的命令行上的任何想法?

+2

您應該使用find的-print0和xargs -0選項來避免可能的錯誤,如果有空格或換行符的文件名。 – Hudson 2010-08-02 12:58:08

0

如果你已經用grep找到了Unix的解決方案,那麼爲什麼你不在Windows上做同樣的事情呢?你可以使用msys和它附帶的unix工具。

我沒有我此刻的機器上安裝Eclipse,但我敢肯定,你可以從Eclipse的

+0

'find。 -name「* .c」| xargs grep「MYFLAG」-q -l | xargs touch'就是這樣做的,但是,我希望在Windows中看到類似的東西。 – Gui13 2010-08-02 12:49:17