CMake笔记1 构建基本的项目

最基础的同级文件操作

首先,创建CMakeLists.txt,这是CMake处理的基本文件。首先给出只有一个文件的最简单的情况:

PROJECT (HELLO)
SET(SRC_LIST main.cc)
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})

几个说明:

  • PROJECT:这是项目名称说明,直接添加项目名称即可。
  • SET:变量说明,用于显示的变量定义,有多个源文件,可以设置为 SET(SRC_LIST main.cc t1.cc t2.cc)
  • MESSAGE:向终端输出用户定义的信息,三种类型:
    • SEND_ERROR:产生错误,生成过程被跳过
    • STATUS:输出前缀为-的信息
    • FATAL_ERROR:立即终止所有的cmake过程
  • ADD_EXECUABLE:添加源文件操作,${}是获取变量的操作,这与shell语法一致。hello是可执行文件的名称,可执行文件名称和工程名称没有任何关系。
  • <projectname>_BINARY_DIR或者PROJECT_BINARY_DIR是指编译发生的当前目录;本例子中说的是build目录

之后,在CMakeLists.txt同级文件夹中,创建一个build文件夹,之后cd build,执行以下两个命令:

  • cmake ..:CMake构建有关的MakeFile等
  • make:执行make编译操作,生成可执行文件

复杂多级目录操作

这里的文件设计到多个目录,同时我们还有帮助文档等。在编译完成后,我们希望把可执行文件加入到指定的bin目录中,最后还要把程序安装在操作系统的/usr/bin目录中。

首先创建目录结构:

.
├── build
├── CMakeLists.txt
└── src
    ├── CMakeLists.txt
    └── main.cpp

其中,main.cpp与上一节的一致,build文件夹同级的CMakeLists.txt的内容如下:

CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
PROJECT(HELLO)
ADD_SUBDIRECTORY(src bin)

main.cpp同级的目录内容如下:

ADD_EXECUTABLE(hello main.cpp)

说明ADD_SUBDIRECTORY的意义:ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])。该指令用于向当前工程添加存放源文件的子目录,并指定中间二进制和目标二进制存放的位置。EXCLUDE_FROM_ALL的含义是把这个目录从编译过程中排除。

注意上述完成编译后,我们在build目录下发现了一个bin目录,这个目录内部有一个hello可执行文件。如果我们想把可执行文件放到其他地方,或者把动态链接库或者静态链接库放到其他地方,需要分别执行以下两个命令:

  • SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
  • SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
    因为我们有两个CMakeLists.txt,添加语句的原则是:在哪里使用 ADD_EXECUTABLE或者ADD_LIBRARY,如果需要改变目标存放路径,就在需要改变的地方加入相关语句。本例子中,肯定实在src的CMakeLists.txt文件中添加了。

CMake定义安装目录

一般来说,makefile执行make过后,可以使用make install进行安装。在CMake中,我们可以自定义安装目录,实现可执行文件或者程序库的安装操作,这里涉及到一个核心变量CMAKE_INSTALL_PREFIX和一个核心指令INSTALL

使用SET命令可以显示指定第一个变量的具体值,之后可以进行INSTALL命令的配置,基本的配置方式如图:

给出一个简单的例子:

myrun可执行二进制文件安装到了${CMAKE_INSTALL_PREFIX}/bin目录中,mylib动态链接库和mystaticlib分别安装到对应的目录中。我们不需要关系TARGETS具体生成的路径,只需要添加上TARGETS名称即可。

举个实战例子,首先在桌面创建foo文件夹,之后在上一节的最外层的CMakeLists.txt文件的最后,追加如下命令:

SET(CMAKE_INSTALL_PREFIX /home/erick/Desktop/foo)
INSTALL(TARGETS hello
        RUNTIME DESTINATION bin
)

之后进入工程的build目录,依次执行:cmake ..makemake install。最后会发现桌面的foo目录下多了一个bin文件夹,里面是hello可执行文件。

有些时候,我们也需要安装文档到合适的位置,这个指令也包含在INSTALL中,举个例子:

INSTALL(DIRECTORY doc/ DESTINATION /share/dock/cmake/pro)

如果不指定特殊的路径,CMAKE_INSTALL_PREFIX默认是/usr/local

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值