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?
我在相关项目中使用 qmake 和 cmake。请指教
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("...")
我从 Debian Jessie 升级到 Debian Stretch,现在发现 MariaDB 已经取代了 MySQL,这很好。
幸运的是,在 C++ 上,仍然可以使用
访问 MariaDB 客户端#include <mysql/mysql.h>
但是,linking 是不同的。我以前 link 和 -lmysqlclient
,现在我必须 link 到 -lmariadbclient
。
我的程序必须同时适用于两者。所以我的问题是:有没有办法检查 MySQL 是否可用,如果不可用,link 到 MariaDB?
我在相关项目中使用 qmake 和 cmake。请指教
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("...")