初次使用cmake

    (Edit by king)毕业设计是标准的 linux c 应用程序,写了一些代码,准备用动态链接库的形式进行编译。

    本来准备自己手工写makefile文件的,看KDE中这么多程序都是用了cmake进行管理,也尝试着使用cmake来管理源代码的依赖和编译。

     由于程序还没有完全写完,首先尝试的是编译成动态链接库的部分在最外层创建一个CMakeLists.txt文件,用来描述源代码之间的关联。

 

project(PAM_OTP)

cmake_minimum_required (VERSION 2.6)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PAM_OTP_SOURCE_DIR}/cmake)

find_package(SQLite3 REQUIRED)

add_library(otp SHARED src/otp_client.c)
add_library(otptoken SHARED src/token_manage.c)

target_link_libraries(otptoken ${SQLITE3_LIBRARIES})

首先需要定义一个项目的名称,使用project命令。

    然后,定义了编译这个项目,需要的cmake的最小版本号,这个在cmake网站上写的有的问题,按照上面写的会提示参数错误。

    再就是设置CMAKE_MODULE_PATH这个变量,因为这个应用需要使用到sqlite3,需要写个cmake文件来寻找sqlite3库和头文件是否存在,这个cmake文件的路径,就是在这个变量里面设置的。这里在原有路径的基础上,增加了项目源代码文件夹下的cmake文件夹。

    然后就是查找依赖,这里查找的是sqlite3,默认的cmake查找文件(位于/usr/share/cmake/Modules)中是没有这个的查询方式的,所以需要自己定义,具体定义的方法,也是网上找来的。这里将sqlite3设置为必须库,如果找不到,cmake命令会执行失败,将停止生成最终的makefile文件。

    后面两句话,就是添加需要创建的库文件,选项SHARED,标注这个需要被编译成动态链接库。

    最后的一句,是将找到的sqlite3库在编译otptoken这个动态链接库的时候进行链接。

 

    最后再说下那个查找sqlite3库的文件:FindSQLite3.cmake

 

 

# - Find SQLite3
# Find the SQLite includes and library
# This module defines
#  SQLITE3_INCLUDE_DIR, where to find mysql.h
#  SQLITE3_LIBRARIES, the libraries needed to use MySQL.
#  SQLITE3_FOUND, If false, do not try to use MySQL.
#
# Copyright (c) 2006, Jaroslaw Staniek, <js@iidea.pl>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.

if(SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARIES)
   set(SQLITE3_FOUND TRUE)

else(SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARIES)

  find_path(SQLITE3_INCLUDE_DIR sqlite3.h
      /usr/include
      /usr/local/include
      $ENV{ProgramFiles}/SQLite/include
      $ENV{SystemDrive}/SQLite/include
      $ENV{ProgramFiles}/SQLite
      $ENV{SystemDrive}/SQLite
      $ENV{ProgramFiles}/SQLite3/include
      $ENV{SystemDrive}/SQLite3/include
      $ENV{ProgramFiles}/SQLite3
      $ENV{SystemDrive}/SQLite3
      )

  find_library(SQLITE3_LIBRARIES NAMES sqlite3
      PATHS
      /usr/lib
      /usr/local/lib
      $ENV{ProgramFiles}/SQLite/lib
      $ENV{SystemDrive}/SQLite/lib
      $ENV{ProgramFiles}/SQLite
      $ENV{SystemDrive}/SQLite
      $ENV{ProgramFiles}/SQLite3/lib
      $ENV{SystemDrive}/SQLite3/lib
      $ENV{ProgramFiles}/SQLite3
      $ENV{SystemDrive}/SQLite3
      )

  if(SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARIES)
    set(SQLITE3_FOUND TRUE)
    message(STATUS "Found SQLite3: ${SQLITE3_INCLUDE_DIR}, ${SQLITE3_LIBRARIES}")
  else(SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARIES)
    set(SQLITE3_FOUND FALSE)
    message(STATUS "SQLite3 not found.")
  endif(SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARIES)

  mark_as_advanced(SQLITE3_INCLUDE_DIR SQLITE3_LIBRARIES)

endif(SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARIES)
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值