2017-08-12 18 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項目,我不知道如何處理它。 –

相關問題