2013-01-21 62 views
0

我有一個關於具體包含使用共享庫功能的問題。我有我自己的小型代碼分析器,我在多個項目中使用,因此通常包含共享庫。最初我想使用編譯時標誌來關閉分析代碼。例如:C++共享庫定義和取消定義功能

#ifdef PROFILEAPP 
class Profiler { 
    static void start() { ... } 
    static void stop() { ... } 
}; 
#else 
class Profiler { 
    static void start(){} 
    static void stop(){} 
}; 

但是,如果沒有定義符號之前手動編譯lib,我不工作。請注意,我的圖書館僅限而非標題。

所以我發現我可以使用CMake的命令編譯兩個不同的目標:

set_property(TARGET my_lib PROPERTY COMPILE_DEFINITIONS "PROFILEAPP") 

這並不工作,但我必須要改變的連接選項在我的客戶端應用程序,以應付兩個不同的.so文件。不過,我想知道這是否要走?像boost這樣的庫在機器差異方面做了類似的事情嗎?有什麼辦法可以通過在我的客戶端應用程序中定義PROFILEAPP來做到這一點?

回答

0

保持兩種不同的構建配置基本上是你可以做的唯一的事情。最終你會發現爲你的應用程序創建幾個構建配置也許是最簡單的。調試,配置文件,發佈等

+0

那麼提升本質上也是這樣做?爲目標平臺構建不同的庫,並在客戶端包含boost頭文件期間可以確定的符號基礎上包含頭文件? –

+0

它看起來很像它(我自己並沒有使用提升)。如果你看這裏http://www.boost.org/doc/libs/1_52_0/more/getting_started/windows.html#library-naming,你可以看到不同的構建配置將被相應命名。 – 2013-01-22 15:11:19

+0

嗯,不錯,確實如此。感謝您的注意! –