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來做到這一點?
那麼提升本質上也是這樣做?爲目標平臺構建不同的庫,並在客戶端包含boost頭文件期間可以確定的符號基礎上包含頭文件? –
它看起來很像它(我自己並沒有使用提升)。如果你看這裏http://www.boost.org/doc/libs/1_52_0/more/getting_started/windows.html#library-naming,你可以看到不同的構建配置將被相應命名。 – 2013-01-22 15:11:19
嗯,不錯,確實如此。感謝您的注意! –