2011-05-04 93 views
0

我有兩個可執行文件必須在同一個項目中共享的代碼(一個構建命令會構建它們)。此代碼包含#ifdef預處理程序語句,這些語句會更改其在每個項目中的工作方式(將命令行宏定義用作開關)。將兩個目錄合併爲一個虛擬目錄以進行編譯/別名包括目錄

來源是摘要從某種意義上說,有些標題丟失。例如,共享文件Application.cpp可能包含名爲gui/MainWindow.h的文件,該文件在共享目錄中不存在,但存在於可執行源目錄中。或者它可能包含名爲gui/Local.h的文件,該文件確實存在於共享目錄中。

本質上我需要gui路徑是兩個位置的組合。

關於unix,我之前通過設置一系列文件鏈接來完成此操作,但是此項目現在將窗口作爲目標(Visual Studio)。另外,我知道如何使用共享目錄結構和設置編譯器包含開關來實現這一點,但我希望有一種更簡單的方法。

任何想法?


我使用CMake作爲編譯器生成代碼,使用GCC和Visual Studio作爲編譯器。

我已經看過爲預處理器定義一個目錄,但#include指令很遺憾不能組合幾個標記來創建文件名。一個名字的作用,這可能是一個選項,讓cmake爲所有共享文件名吐出宏。

回答

0

我真的認爲最簡單的解決方案是使用包含路徑 - 爲不同項目使用不同的路徑。查看property sheets以在項目之間共享設置並大大簡化管理。

如果您在unix中使用文件鏈接,則可以在Windows中使用symbolic links

+0

我知道這種方法,但在這種情況下,它感覺不太正確。這將是對項目當前目錄結構的巨大改變/分歧。 – 2011-05-04 07:06:44

+0

我希望你可以保持目錄結構相同,並使用include路徑包含正確的目錄,就像你使用#defines一樣。包含路徑將允許您爲每個項目設置一個「gui」目錄,併爲所有項目提供一個共享的「gui」目錄。 – Bids 2011-05-04 07:11:30

+0

目前我們的設置是一個包含子文件夾的通用包含目錄,include/lib爲了執行共享包含,我必須有像include/exec_a/include/gui這樣的目錄,但是'exec_a'是一種一個無意義的include,並且這個結構也必須在'src'目錄中重複。我知道這會起作用,它對我們當前的目錄結構並不那麼友好。 – 2011-05-04 07:19:51