CMake:02 外部构建以及安装 CMake

任务目标

  • 外部构建 CMake
  • 安装 CMake

一、外部构建 CMake 的 HelloWorld

① 进入 /home/lql/cmake 目录

cd /home/lql/cmake

新建并进入 t2 工作目录

mkdir t2 && cd t2

② 新建并进入 src 目录(用于存放源代码 main.c 和 src 目录相应的 CMakeLists.txt)

mkdir src && cd src

新建 main.c 到刚创建的 src 目录

vim main.c

输入内容:

#include <stdio.h>

int main() {
    printf("Hello World from t2 Main!\n");
    return 0;
}

新建 CMakeLists.txt

vim CMakeLists.txt

输入内容:

ADD_EXECUTABLE(hello main.c)

③ 在主工程目录(/home/lql/cmake/t2)下,新建 CMakeLists.txt

vim CMakeLists.txt

输入内容:

cmake_minimum_required(VERSION 3.10)

PROJECT(HELLO)
ADD_SUBDIRECTORY(src bin) // 解释见下方 "指令解释"

④ 新建并进入 build 目录

mkdir build && cd build

⑤ 外部构建

cmake ..
make

外部构建

二、安装

经过安装后生成的可执行二进制,可以在任何目录下直接调用可执行文件名,对应要操作的文件是 Makefile

  • 方式一:从代码编译后直接 make install 安装
  • 方式二:打包时的指定目录安装

方式一:从代码编译后直接 make install 安装

进入可执行文件目录(主工程目录:/home/lql/cmake/t2)

cd /home/lql/cmake/t2/build/bin

删除或重命名已有的 MakeFile 文件,编写自己的 MakeFile

DESTDIR=
install:
    	mkdir -p ${DESTDIR}/usr/bin
    	install -m 755 hello ${DESTDIR}/usr/bin

先不用管参数都是什么意思,后面会讲到,但是文件大致作用是 mkdir 创建一个目录,然后 install 安装可执行文件 hello

先安装试一把

make install

make install

查看安装目录 /usr/bin
安装生成 hello 可执行文件

指定 Makefile 安装生成目录
make install DESTDIR=/home/lql

指定 Makefile 安装生成目录

定义前缀 PREFIX

改写 Makefile

DESTDIR=
PREFIX=usr
install:
    	// {} 也可以换成 ()
		mkdir -p ${DESTDIR}/${PREFIX}/bin
		install -m 755 hello ${DESTDIR}/${PREFIX}/bin

方式二:打包时的指定目录安装

进入可执行文件目录(主工程目录:/home/lql/cmake/t2)

cd /home/lql/cmake/t2

加点东西,搞得正规一点
添加 doc 目录及文件

mkdir doc
cd doc
vim hello.txt
// 随便写点内容保存后退出

在主工程目录添加 runhello.sh 脚本,内容:hello

vim runhello.sh
// 内容:hello

在主工程目录添加 COPYRIGHT 和 README

touch COPYRIGHT
touch README

修改主工程目录下的文件 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)

PROJECT(HELLO)
ADD_SUBDIRECTORY(src bin)

# 添加如下内容
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/t2) // 安装 COPYRIGHT、README 文件(FILES)到 share/doc/cmake/t2
INSTALL(PROGRAMS runhello.sh DESTINATION bin) // 安装 runhello.sh 脚本(PROGRAMS)到 bing
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/t2) // 安装 doc 中的内容(DIRECTORY)到 share/doc/cmake/t2

安装可执行文件 hello
修改 src 下的 CMakeLists.txt

ADD_EXECUTABLE(hello main.c)

# 添加如下内容
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) // 指定可执行文件 hello(目标二进制文件)的生成位置,默认就在 build/bin,由 ADD_SUBDIRECTORY 指令指定,详见下方 "指令解释"
INSTALL(TARGETS hello RUNTIME DESTINATION bin) // 安装可执行文件 hello

进入 build 目录,进行外部构建

cmake -DCMAKE_INSTALL_PREFIX=/home/lql/usr ..
make
make install

进入 build 目录,进行外部构建
查看安装目录(/home/lql/usr)
查看安装目录

三、指令解释

① ADD_SUBDIRECTORY

# source_dir:源文件所在目录
# binary_dir:中间二进制文件和目标二进制文件存放目录
# EXCLUDE_FROM_ALL:将所指定的目录从编译过程中排除
ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

② SET

# 上面 ADD_SUBDIRECTORY 指令的 binary_dir 和 下面 SET 的 path 可同可不同,都可行
# 上面 ADD_SUBDIRECTORY 指令的 binary_dir 和 下面 SET 的 path 是相对路径,貌似在哪执行 cmake 命令相对的就是哪个目录

# 指定生成的可执行文件(目标二进制文件)的位置
SET(EXECUTABLE_OUTPUT_PATH <path>)

小结

  • CMAKE_INSTALL_PREFIX 变量,外部编译指定安装目录
  • ADD_SUBDIRECTORY 指令,指定中间二进制文件和目标二进制文件存放目录
  • EXECUTABLE_OUTPUT_PATH 变量,指定生成的可执行文件(目标二进制文件)的位置
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值