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 變量,指定生成的可執行文件(目標二進制文件)的位置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章