2010-03-23 49 views
2

在C項目中,我在幾個文件中都有一個main()函數。當我編譯時,我有一個錯誤「主要的多重聲明」。是否可以在Makefile中選擇哪些main()函數應該用於編譯? (其他人將被忽略...)選擇在Makefile中使用哪個main()

回答

4

你可以使用預處理器隱藏起來:

在file1.c中:

#if defined FILE1_MAIN 
int main(void) 
{ 
    printf("Running main() in file1.c"); 
    return 0; 
} 
#endif 

這可以在任意數量的C文件根據需要重複。

然後在Makefile中有邏輯將正確的-D選項傳遞給編譯器,即-DFILE1_MAIN包含file1中的main(),-DFILE2_MAIN中包含file2.c中的內容等等。

該技術在實施例庫模塊,以包含一個可選的main()用於在單個C文件中進行測試。

+0

謝謝,效果很好! – 2010-03-23 11:26:45

0

您的源中只有一個main()函數。您必須重命名所有其他實例,或者從構建中排除包含main()的其他實例的源文件。

1

您可以簡單地爲每個main()編寫一個目標,其中您將忽略除包含main()之外的所有文件。

相關問題