多工程CMakeLists的生成库问题

最近开发的代码中属于下面的结构:

  • CMakeLists.txt会设置生成两个工程,一个生成动态链接库lib和dll,暂且命名为LibProject;另一个生成可执行程序,暂且命名为ExeProject。
  • 其中,ExeProject会调用LibProject生成的库。

 那么对于生成lib的工程,C++代码中需要这么表示:

#ifdef _EXPORTING
#define EXPORT_DLL    __declspec(dllexport)
#else
#define EXPORT_DLL    __declspec(dllimport)
#endif

并且对于每个要生成到Lib中的类或者函数,都需要先包含该头文件,然后在类或者函数上标记EXPORT_DLL,表示需要导出dll。

此时,在CMakeLists.txt中需要先预定义宏_EXPORTING。

但是,该预定义对于ExeProject也是可见的。而我们希望ExeProject没有宏_EXPORTING,这样该工程看到的函数都是导入模式。我的解决方法是在ExeProject中定义一个公共头文件Common.h,该头文件中定义:

#undef _EXPORTING

之后所有的ExeProject都先包含该文件,然后再包含其他头文件。

这样,就不会生成和ExeProject同名的库,ExeProject.lib了(否则可能会报错与ExeProject.lib同名的问题)。

还有一个问题需要描述一下,就是LibProject中所有要导出的函数或者类都必须被.cpp包含,否则无法导入到lib库中。

你可能感兴趣的:(C++,c++,开发语言)