作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] Compile的問題
時間Thu Jul 14 18:41:30 2011
※ 引述《mida (實況「野球」魂)》之銘言:
: 所以我應該要怎樣修正,可以讓這2個程式可以共用MyLib.lib,
: 而MyApp1.exe看不到也不會include Function2,
: 但MyApp2.exe則可以呢?
: 而且前題是MyLib.lib, MyApp1.exe, MyApp2.exe修改好後,不用在額外改code,
: 各compile一次就可以達到這樣的目標呢?
方法就像推文中所說的那樣,在 compile MyLib 的時候加入 __INCLUDE_FUN2__,
這麼一來 MyLib 裡面會有 Function2() 的定義。(MyApp2要用的)
然後在 compile MyApp1 的時候,不要加入 __INCLUDE_FUN2__,
這麼一來 MyApp1 將無法呼叫 Function2()。
不過,奉勸你不要做這種事。
上述的法方之所以可行,是因為 Library 中添加 function 這件事是向上相容的,
也就是說多了 Function2 的 MyLib 相容於沒有 Function2 的版本
因此 MyApp1 才能正常使用。
但是許多對 Library 的修改並無向上相容,比如說:
class MyLib2 {
public:
int Function1();
#ifdef INCLUDE_NAME
std::string name;
#endif
};
很不幸的,這種情況下同一招不管用,
因為一來 MyLib2 這個 class 在不同的情況下會有不同的大小,
另一方面,在含有 name 這個 member variable 的情況下,
建立物件時需要呼叫 ctor,
而不含任何 member variable 的時候 compiler 通常會省略 ctor。
建議你把會變動的部份獨立成另一個函式庫,
否則很容易踩到這種地雷。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.15.163
推 mida:謝謝說明,我本來以為我遇到的問題很單純所以想了我前篇po的 07/14 19:27
→ mida:例子來發問,但經過你一解釋,我發現我現在遇到的case剛好是 07/14 19:28
→ mida:你說的地雷.....囧,看來要新建Lib比較實際。 07/14 19:28