API 在 Debian 中自动 link 到 MySQL 或 MariaDB 以实现向后兼容性的稳定方式

API stable way to automatically link to either MySQL or MariaDB in Debian for backward compatibility

我从 Debian Jessie 升级到 Debian Stretch,现在发现 MariaDB 已经取代了 MySQL,这很好。

幸运的是,在 C++ 上,仍然可以使用

访问 MariaDB 客户端
#include <mysql/mysql.h>

但是,linking 是不同的。我以前 link 和 -lmysqlclient,现在我必须 link 到 -lmariadbclient

我的程序必须同时适用于两者。所以我的问题是:有没有办法检查 MySQL 是否可用,如果不可用,link 到 MariaDB?

我在相关项目中使用 qmakecmake。请指教

CMake 模块 FindMariaDB 包含在 MariaDB 中。 FindMySql 似乎在 MySql 之外,在 GitHub 存储库中有很多关于它的搜索结果。使用标志 OPTIONAL 搜索两者。然后根据MariaDB_FOUND,设置一个变量为MariaDB_LIBRARIES或MySql_LIBRARIES的值。在随后的 target_link_libraries().

中使用该变量

对于 cmake 你可以简单地使用:

    find_library( MYSQL_LIBRARY
    NAMES "mysqlclient" "mysqlclient_r"
    PATHS "/lib/mysql"
          "/lib64/mysql"
          "/usr/lib/mysql"
          "/usr/lib64/mysql"
          "/usr/local/lib/mysql"
          "/usr/local/lib64/mysql"
          "/usr/mysql/lib/mysql"
          "/usr/mysql/lib64/mysql" )

然后检查:

if(MYSQL_LIBRARY) {
  ...
}

喜欢 github 中的示例:FindMYSQL(RenatoUtsch) or FindMySQL(mloskot)


对于 qmake,我发现的唯一一件事就是检查这样的典型位置:

!exists("/foo/bar/baz.so"):!exists("/hello/world/baz.so"):...: message("...")