2017-08-12 21 views
0

我从Debian Jessie升级到Debian Stretch,现在发现MariaDB已经取代了MySQL,这很好。API稳定的方式来自动链接到Debian的MySQL或MariaDB以实现向后兼容

幸运的是,在C++中,MariaDB的客户仍与

#include <mysql/mysql.h> 

但是,该链接为不同的访问。我曾经连接-lmysqlclient,现在我必须链接到-lmariadbclient

我的程序必须在两者上工作。所以我的问题是:有没有办法检查MySQL是否可用,如果没有,链接到MariaDB?

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

+0

它是一个真正的问题? Maria是高度兼容的,或者用mySQL完全替代 –

+0

@JacekCz问题在于链接。我需要make工具来自动检测MariaDB或MySQL是否可用。作为数据库处理程序,我没有MySQL或MariaDB的问题。 –

+0

在一个环境中链接的程序假设在另一个环境中工作良好? –

回答

0

对于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)FindMySQL(mloskot)


对于QMAKE我发现的唯一的事情是检查这样的典型位置:

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

CMake模块FindMariaDB包含在MariaDB中。 FindMySql似乎是MySql外部的,GitHub仓库中有很多搜索结果。搜索两者,标志为可选。然后基于MariaDB_FOUND,将变量设置为MariaDB_LIBRARIES或MySql_LIBRARIES的值。在随后的target_link_libraries()中使用该变量。

+0

你是对的。对于CMake来说,这不是一个大问题。直到现在,我才想到它。但对于我目前的qmake项目,我不知道如何处理它。 –

相关问题