cmake链接MySQL分析

下面这份代码,是我从网上找到的添加MySQL头文件和链接文件的CMake代码。

# - Find mysqlclient
# Find the native MySQL includes and library
#
#  MYSQL_INCLUDE_DIR - where to find mysql.h, etc.
#  MYSQL_LIBRARIES   - List of libraries when using MySQL.
#  MYSQL_FOUND       - True if MySQL found.

IF (MYSQL_INCLUDE_DIR)
  # Already in cache, be silent
  SET(MYSQL_FIND_QUIETLY TRUE)
ENDIF (MYSQL_INCLUDE_DIR)
#从下面那两个路径找mysql.h,将找到的路径放到MYSQL_INCLUDE_DIR这个变量中。
FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
  /usr/local/include/mysql
  /usr/include/mysql
)
#设置要寻找的链接库的名字,这里应该是找libmysqlclient.so
SET(MYSQL_NAMES mysqlclient mysqlclient_r)
#将libmysqlclient.so的路径放到MYSQL_LIBRARY
FIND_LIBRARY(MYSQL_LIBRARY
  NAMES ${MYSQL_NAMES}
  PATHS /usr/lib /usr/local/lib
  PATH_SUFFIXES mysql
)

#如果上面找到mysql的头文件和mysql的库文件,就将MYSQL_FOUND设为真
IF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
  SET(MYSQL_FOUND TRUE)
  SET( MYSQL_LIBRARIES ${MYSQL_LIBRARY} )
ELSE (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
  SET(MYSQL_FOUND FALSE)
  SET( MYSQL_LIBRARIES )
ENDIF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)

#如果找到并且没有设置QUIET,则输出搜到动态库路径
#如果找不到就输出错误信息
IF (MYSQL_FOUND)
  IF (NOT MYSQL_FIND_QUIETLY)
    MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARY}")
  ENDIF (NOT MYSQL_FIND_QUIETLY)
ELSE (MYSQL_FOUND)
  IF (MYSQL_FIND_REQUIRED)
    MESSAGE(STATUS "Looked for MySQL libraries named ${MYSQL_NAMES}.")
    MESSAGE(FATAL_ERROR "Could NOT find MySQL library")
  ENDIF (MYSQL_FIND_REQUIRED)
ENDIF (MYSQL_FOUND)

#将他标记为高级变量,具体什么作用没查到
MARK_AS_ADVANCED(
  MYSQL_LIBRARY
  MYSQL_INCLUDE_DIR
  )

我们可以将这份代码写成一个cmake模块,然后通过FIND_PACKAGE(< name>)去得到这个模块的头文件路径和链接库路径,得到的路径一般会存放在< name>_LIBRARIES,< name>_INCLUDE_DIR这两个变量中。
我可以将上面那份代码放到一个新的文件中FindMySQL.cmake,通过在主CMakeLists.txt中SET(CMAKE_MODULE_PATH dir)将其放入工程的某个目录中供工程使用,然后就可以调用FIND_PACKAGE(MySQL)就可以得到mysql的头文件路径和动态链接库路径:MySQL_INCLUDE_DIR, MySQL_LIBRARIES。

你可能感兴趣的:(linux,C++语言)