![](/img/trans.png)
[英]C/C++ Macro: How to generate two separate sections of code with one macro (boost preprocessor library?)
[英]How to turn off submodule of a C++ library based on preprocessor defined macro
我在做什么,我正在編寫一個依賴NetCDF
庫的C ++庫。 例如,
include <netcdf>
class myLib {
public:
myLib();
myLib(const myLib&);
virtual ~myLib();
std::string probe_data(std::string & file_path);
...
函數probe_data
使用NetCDF
庫中的函數。
我定義了預處理程序宏CANALOGSIO_WITHOUT_NETCDF
是什么問題 。 因為在某些系統中,沒有安裝NetCDF
庫。 因此,我想在我的庫中關閉此功能,例如,該庫仍將具有probe_data
函數,但它只會返回NetCDF not installed
。
這樣做的一個好習慣是什么? 謝謝!
我將為此列出兩種不同的方法。
1,只需在函數定義中使用ifdefs。 這將保持統一的界面,每個人都可以調用它。
class myLib {
...
std::string probe_data(std::string & file_path) {
#ifdef NETCDF
return do_real_probe(file_pat);
#else
cerr << "NOt implemented function" << endl;
return "";
#endif
}
...
這需要對單獨的系統進行單獨的編譯。 您需要在編譯命令行中提供宏的定義,即使用gcc:
g++ -DNETCDF ..
sys1.cpp
string probe(string &) { return do_probe();}
gcc sys1.cpp -o sys1.so -shared
sys2.cpp
string probe(string &) {cerr << messate; return "";}
gcc sys2.cpp -o sys2.so -shared
現在,您只需要將正確的庫(sys1或sys2)傳遞到正確的系統即可。 或正確的程序靜態鏈接映像。
有多種使用條件編譯的方法。 所以你決定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.