【CMAKE实践T2】CMAKE实践【2】学习

前言

学了一天半,学到t3的时候发现px4固件的makefile好像是手写的,Σ( ° △ °|||)︴,不过《CMAKE practice很好,既然学了就学完总结下了,
t1太简单了,就直接讲t2工程的建立和t3如何构建共享库(静态库和动态库)以及t4调用动态库

t2 构建工程的建立

  1. 为工程添加一个目录src,放置源代码
  2. 添加一个子目录,用来放置工程的文档hello.txt
  3. 添加文本文件COPYRIGHT,README;
  4. 添加一个runhello.sh,调用二进制编译文件
  5. 构建后的目标文件放入构建目录的bin目录
  6. 最近安装文件:将hello二进制与runhello.sh 安装至/usr/bin,讲doc目录的内容及COPYRIGHT/README安装到/usr/share/doc/cmake/t2

其中1,2,3,4在我没有学cmake之前就会了

mkdir src
mkdir doc
cd doc
touch readhello.txt
cd ..
touch COPYRIGHT README
vim runhello.sh
add:./hello
:wq

看教程:

  1. 创建主工程目录的CMakeLists.txt
    需要注意的是:CMakeLists.txt 文件名必须区分大小写,但是里面的内容关键字不区分大小写,但建议大写
# 工程名,其会隐试定义两个变量值 PROJECT_SOURE_DIR
# PROJECT_BINARY_DIR
PROJECT(hello)
ADD_SUBDIRECTORIES(src bin)

ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
其中参数[EXCLUDE_FROM_ALL]:将这个目录从编译过程中排除,比如什么example,example可能是需要先构建完工程,在进行单独编译。

2. 创建代码文件

cd src
vim main.c()
add:
#include<stdio.h>
int main()
{
	printf("hello world \n");
	return 0
}
:wq

添加CMakeLists.txt

ADD_EXECUTABLE(hello main.c)
  1. 换个地方保存二进制文件
    这个地方就要用到刚才隐试定义的两个参数PROJECT_BINARY_DIR,PRO_SOURCE_DIR,发现前者是运行CMAKE的文件夹,后者是工程目录,换个地方保存二进制就需要用到这个参数
    SET(EXECTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
    不过我们前面定义过ADD_SUBDIRECTORIES,
    这条命令在哪个CMakeLists.txt中写呢,答案是哪里ADD_EXECTUABLE就在哪里写了
    不过我们之前写的ADD_SUBDIRECTORIES(SOURECE_DIR,BINARY_DIR)是有效的,我发现不写上面的代码依然能够在build/bin出现二进制文件,但是如果使用上面代码可以在build下指定一个文件夹只放二进制文件,如果一起写的话就是会让二进制文件放在指定文件中,但是如果指定的输出文件也是bin那这条指令就失效了。
  2. 如何安装
    这是我觉得最酷的地方了
    需要用到INSTALL指令,安装的内容可以包括目标二进制、动态库、静态库及文件和脚本目录
    程序安装
INSTALL(TARGET target ...
				[[ARCHIVE|LIBRARY|RUNTIME]] # 静态库 动态库 二进制文件
							[DESTINATION] <dir>) #安装文件夹必须用相对路径
			....

普通文件安装

INSTALL(FIELS files ... DESTINATION <dir>)

非目标文件的安装(比如脚本)

INSTALL(PROGRAMS files... DESTINATION <dir>)

其中DETINATION “<、dir>” 都是安装的相对路径

目录的安装:

INSTALL(DIRECTORIES dirs ... DESTINATION <dir>)

安装CMAKE脚本执行(xxx.cmake)

INSTALL([[SCRIPT <file>] [CODE <code>]] [...])

这个命令没用也没看懂

其中还有些参数没有列出,以后深入的时候在学习。

在这里插入图片描述
主工程目录的CMakeLists.txt

PROJECT(HELLO)
ADD_SUBDIRECTORY(src bin)
MESSAGE(STATUS "BINARY_DIR:${PROJECT_BINARY_DIR}")
MESSAGE(STATUS "SOURCE_DIR:${PROJECT_SOURCE_DIR}")
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/t2)
#INSTALL(TARGETS hello RUNTIME DESTINATION bin)
INSTALL(PROGRAMS runhello.sh DESTINATION bin)
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/t2)

/src/CMakeLists.txt

SET(SRC_LIST main.c)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) # this is invaild commander
ADD_EXECUTABLE(hello ${SRC_LIST})
INSTALL(TARGETS hello RUNTIME DESTINATION bin)

编译命令

CMAKE -DCMAKE_INSTALL_PREFIX=<path>

如果没有-DCMAKE_INSTALL_PREFIX直接make install 我没有试过,但是作者说默认是/usr/local

完了,收益匪浅,感谢《CMAKE practice》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值