我正在做什么我正在编写一个依赖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
。
这样做的好习惯是什么?谢谢!
答案 0 :(得分:0)
我将列出两种不同的方法,我想到这一点。
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)传送到正确的系统。或者是程序的正确静态链接图像。
使用条件编译有多种方法可以做到这一点。所以你决定。