CMake编程实践(二) 常用语法

本文详细介绍了CMake的常用语法,包括PROJECT定义工程名称、SET定义变量、MESSAGE输出信息、ADD_EXECUTABLE定义可执行文件、INCLUDE_DIRECTORIES添加头文件路径、LINK_DIRECTORIES添加库路径、TARGET_LINK_LIBRARIES链接库、INSTALL安装指令等。通过这些指令,可以方便地管理和构建C++项目。
摘要由CSDN通过智能技术生成

CMake常用语法

PROJECT 定义工程名称

PROJECT(projectname [CXX] [C] [Java])
你可以用这个指令定义工程名称,并可指定工程支持的语言,支持的语言列表是可以忽略的,
默认情况表示支持所有语言。这个指令隐式的定义了两个 cmake 变量:
_BINARY_DIR 以及_SOURCE_DIR,例如上一节中使用到的
HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR就是这样隐式定义的。
同时 cmake 系统也帮助我们预定义了 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR
变量,他们的值分别跟 HELLO_BINARY_DIR 与 HELLO_SOURCE_DIR 一致。

SET 定义变量

SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
现阶段,你只需要了解 SET 指令可以用来显式的定义变量即可。
比如我们用到的是 SET(SOURCE main.c),如果有多个源文件,也可以定义成:
SET(SOURCE main.c test1.c test2.c)。

MESSAGE 输出信息

MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display"
...)

这个指令用于向终端输出用户定义的信息,包含了三种类型:SEND_ERROR,产生错误,生成过程被跳过。
SATUS,输出前缀为—的信息。FATAL_ERROR,立即终止所有 cmake 过程

ADD_EXECUTABLE 定义可执行文件

ADD_EXECUTABLE(Hello ${SOURCE})
定义了这个工程会生成一个文件名为Hello的可执行文件,相关的源文件是SOURCE中
定义的源文件列表, 你也可以直接写成ADD_EXECUTABLE(Hello main.cpp)。

INCLUDE_DIRECTORIES 添加头文件路径

INCLUDE_DIRECTORIES,其完整语法为:

INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)

这条指令可以用来向工程添加多个特定的头文件搜索路径,路径之间用空格分割,如果路径
中包含了空格,可以使用双引号将它括起来,默认的行为是追加到当前的头文件搜索路径的
后面,你可以通过两种方式来进行控制搜索路径添加的方式:
1,CMAKE_INCLUDE_DIRECTORIES_BEFORE,通过 SET 这个 cmake 变量为 on,可以
将添加的头文件搜索路径放在已有路径的前面。
2,通过 AFTER 或者 BEFORE 参数,也可以控制是追加还是置前。

LINK_DIRECTORIES 添加库的路径

LINK_DIRECTORIES(directory1 directory2 ...)

这个指令非常简单,添加非标准的共享库搜索路径,比如,在工程内部同时存在共享库和可
执行二进制,在编译时就需要指定一下这些共享库的路径。

TARGET_LINK_LIBRARIES 为target添加共享库

TARGET_LINK_LIBRARIES 的全部语法是:

TARGET_LINK_LIBRARIES(target library1
                    <debug | optimized> library2
                    ...)

这个指令可以用来为 target 添加需要链接的共享库,可以用于为自己编写的共享库添加共享库链接。

共享库的名称写法有多种,以下写法均是可以的:

TARGET_LINK_LIBRARIES(project utils) # 连接libhello.so库,默认优先链接动态库
TARGET_LINK_LIBRARIES(project libutils.a) # 显示指定链接静态库
TARGET_LINK_LIBRARIES(project libutils.so) # 显示指定链接动态库
TARGET_LINK_LIBRARIES(project -lutils)

e.g:

# 指定库的位置为项目根目录下的lib目录
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib_utils/lib)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib_utils/include)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} utils)

INSTALL 安装指令

INSTALL 指令用于定义安装规则,安装的内容可以包括目标二进制、动态库、静态库以及文件、目录、脚本等。
提到INSTALL就不得不提一下CMAKE_INSTALL_PREFIX变量,类似于 configure 脚本的 –prefix,用于指定安装的位置,默认位置是/usr/local/,不同的系统默认位置可能不一样,常见的使用方法看
起来是这个样子:

cmake -DCMAKE_INSTALL_PREFIX=/usr .

INSTALL 指令包含了各种安装类型,我们需要一个个分开解释:
目标文件的安装:

INSTALL(TARGETS targets...
[[ARCHIVE|LIBRARY|RUNTIME]
[DESTINATION <dir>]
[PERMISSIONS permissions...]
[CONF
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值