0

我想使用sqlncli.h,但前提是它对用户可用,如果没有,我想使用不太优化但功能强大的替换代码(我真的只想使用多个活动结果集,其他 DBMS 似乎不需要特殊配置为了这)。用户将拥有源文件,并将在他们的机器上自己构建它,所以我可以使用某种预处理器/条件编译标志来处理这个吗?

我知道有一些标志_WIN32可以用来检查用户是否在 Windows 上(我这样做,因为 Windows 用户需要windows.h使用我的代码)。

这是一个通用的 ODBC 库,所以我不知道用户是否会连接到 SQL Server。

我唯一的选择是让用户指定他们是否要使用 SQL Server+Native Client(例如通过定义一些标志)

4

2 回答 2

1

如果你有一个现代编译器(c++17),你可以使用 __has_include 来测试一个特定文件的存在:

#if __has_include(<sqlncli.h>)
于 2020-03-27T17:47:22.390 回答
0

这类事情通常由 CMake 或 Automake 等构建系统生成器处理。作为生成构建脚本的一部分,您尝试编译一个包含相关库的简单程序。如果成功,您可以更改生成构建脚本的方式以编译不同的文件和/或设置一些预处理器标志,以便您可以 -#ifdef选择正确的实现。

于 2020-03-27T18:01:19.110 回答