cmake中查找并使用其他程序库

在开发软件的时候我们会用到一些函数库,这些函数库在不同的系统中安装的位置可能不同,编译的时候需要首先找到这些软件包的头文件以及链接库所在的目录以便生成编译选项。


1 在项目的根目录中创建目录 cmake/modules/ ,在 cmake/modules/ 下创建文件 Findlibapue.cmake

#文件 Findlibapue.cmake 的命名要符合规范: FindlibNAME.cmake ,其中NAME 是函数库的名称。Findlibapue.cmake 的语法与 CMakeLists.txt 相同。这里使用了三个命令: MESSAGE , FIND_PATH 和 FIND_LIBRARY

MESSAGE(STATUS "Using bundled Findlibapue.cmake...") #命令 MESSAGE 会将参数的内容输出到终端。
#命令 FIND_PATH 指明头文件查找的路径,FIND_PATH(<VAR> name1 [path1 path2 ...]) 该命令在参数 path* 指示的目录中查找文件 name1 并将查找到的路径保存在变量 VAR 中。这里的意思是在 /usr/include/ 和 /usr/local/include/ 中查找文件apue.h ,并将apue.h 所在的路径保存在 LIBAPUE_INCLUDE_DIR中。
FIND_PATH(
    LIBAPUE_INCLUDE_DIR
    apue.h 
    /usr/include/ 
    /usr/local/include/ 
)
#命令 FIND_LIBRARY 同 FIND_PATH 类似,用于查找链接库并将结果保存在变量中。这里的意思是在目录 /usr/lib/ 和 /usr/local/lib/ 中寻找名称为 apue 的链接库,并将结果保存在LIBAPUE_LIBRARIES。
FIND_LIBRARY(
   LIBAPUE_LIBRARIES NAMES  apue
   PATHS /usr/lib/ /usr/local/lib/
)



2 在项目的根目录中创建 CmakeList.txt :

#可以查找链接库的 CMakeList.txt
PROJECT(apue_chap1)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET(CMAKE_SOURCE_DIR .)
SET(CMAKE_MODULE_PATH ${CMAKE_ROOT}/Modules ${CMAKE_SOURCE_DIR}/cmake/modules) #表示到目录 ./cmake/modules 中查找 Findlibdb_cxx.cmake



# 查找链接库和头文件开始,这里是链接库apue库
FIND_PACKAGE(libapue REQUIRED) #使用命令FIND_PACKAGE查找,这条命令执行后CMake会到变量CMAKE_MODULE_PATH指示的目录中查找文件 Findlibapue.cmake 并执行
MARK_AS_ADVANCED(
    LIBAPUE_INCLUDE_DIR
    LIBAPUE_LIBRARIES
)
#if表示如果LIBAPUE_INCLUDE_DIR和LIBAPUE_LIBRARIES都被赋值,则设置编译时到LIBAPUE_INCLUDE_DIR寻找头文件并与库LIBAPUE_LIBRARIES链接
IF (LIBAPUE_INCLUDE_DIR AND LIBAPUE_LIBRARIES)
    MESSAGE(STATUS "Found libapue libraries")
    INCLUDE_DIRECTORIES(${LIBAPUE_INCLUDE_DIR})
    MESSAGE(${LIBAPUE_LIBRARIES})
    # TARGET_LINK_LIBRARIES(main ${LIBAPUE_LIBRARIES}
    LINK_LIBRARIES(${LIBAPUE_LIBRARIES})
ENDIF (LIBAPUE_INCLUDE_DIR AND LIBAPUE_LIBRARIES)
# 查找链接库和头文件结束


ADD_EXECUTABLE(1-1 1-1.c)
ADD_EXECUTABLE(1-2 1-2.c)
ADD_EXECUTABLE(1-3 1-3.c)
ADD_EXECUTABLE(1-4 1-4.c)
ADD_EXECUTABLE(1-5 1-5.c)
ADD_EXECUTABLE(1-6 1-6.c)
ADD_EXECUTABLE(1-7 1-7.c)
ADD_EXECUTABLE(1-8 1-8.c)


3 完成 Findlibapue.cmake 和 CMakeList.txt 的编写后在项目的根目录依次执行 “cmake . ” 和 “make ” 可以进行编译


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值