cmake(3)

更好的Helloworld

1、创建一个t2目录,把t1中的main.c和CmakeList.txt文件复制到t2.
2、添加子目录src,把main.c移动到src目录中
看一下t2目录的文件:
在这里插入图片描述
3、需要为任何一个子目录建立一个CMakeList.txt文件,为src创建CMakelist.txt

ADD_EXECUTABLE(hello main.c)//生成目标文件

4、t2目录的CMakeList.txt文件修改成

PROJECT (HELLO)
ADD_SUBDIRECTORY(src bin)//向当前工程中添加子目录,指定中间文件和目标文件的存放位置也就是把中间文件放在了build/bin目录下

5、建立build目录,运行cmake . . 运行make会在build/bin目录中生成hello目标文件。
看一下文件:
在这里插入图片描述
6、换个位置保存目标文件

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
这两个指令定义了二进制输出为build/bin库输出为build/lib
CMakeList.txt文件中的指令PROJECT (HELLO)隐式定义了
<projectname>_BINARY_DIR和<projectname>_SOURCE_DIR
这里就是HELLO_BINARY_DIR和HELLO_SOURCE_DIR
也可以是PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR
如果是内部编译的话就是工程所在的目录
外部编译的话就是外部编译所在的目录在这个例子中就是build

把这两个指令加入到那个CMakelist.txt文件夹下,在哪里ADD_EXECUTABLE或者ADD_LIBRARY,如果需要改变目标存放位置,就在哪里加上定义。

7、安装
安装需要两种,一种是在代码编译后直接安装,一种是打包时指定安装目录。
可以通过:

make install

将hello直接安装在/usr/bin目录,也可以通过

make install DESTDIR = /tmp/test

安装在/tmp/test/usr/bin目录。

8、安装规则
安装的内容包括目标二进制文件、动态库、静态库、以及文件、目录、脚本等。

1、目录文件的安装
INSTALL(TARGETS targets...//此处就是我们通过ADD_EXECUTABLE或者ADD_LIBRARY定义的目标文件(二进制文件、动态库、静态库)
[[ARCHIVE|LIBRARY|RUNTIME]//分别表示静态库、动态库、目标二进制文件
		[DESTINATION <dir>]//定义安装路径
		[PERMISSIONS permissions...]
		[CONFIGURATIONS [Debug|Release|...]]
		[COMPONENT <component>]
		[OPTIONAL]]
		[... ]
)
2、普通文件的安装
INSTALL(FILES filess... DESTINATION <dir>
		[PERMISSIONS permissions...]//访问权限默认644
		[CONFIGURATIONS [Debug|Release|...]]
		[COMPONENT <component>]
		[RENAME <name>]
		[OPTIONAL])
3、非目标文件的安装
INSTALL(PROGRAMES files... DESTINATION <dir>
		[PERMISSIONS permissions...]//访问权限默认755
		[CONFIGURATIONS [Debug|Release|...]]
		[COMPONENT <component>]
		[RENAME <name>]
		[OPTIONAL])
4、目录的安装
INSTALL(DIRECTORY dirs... DESTINATION <dir>
		[FILE_PERMISSIONS permissions...]//访问权限默认644
		[DIRECTORY_PERMISSIONS permissions ]
		[USE_SOURCE_PERMISSIONS]
		[CONFIGURATIONS [Debug|Release|...]]
		[COMPONENT <component>]
		[[PATTERN <pattern> | REGEX <regex>]
		[EXCLUDE]
		[PERMISSIONS permissions...]] [])
	//DIRECTORY后面连接的是所在source目录的相对路径,但是注意:abc和abc/的区别abc代表这个目录安装为目标路径下的abc
	abc/代表将这个目录中的内容安装到目标路径,但是不包括这个目录本身。
	例如
	INSTALL(DIRECTORY icons scripts/ DESTINATION share/myproj//icons安装到<prefix>/share/myproj 将scripts/中的内容安装到 <prefix>/share/myproj
		PATTERN "cvs"  EXCLUDE//不包含cvs
		PATTERN "scripts/*"
		PERMISSIONS permissions...//指定权限)

二 修改我们的工程

1、在t2添加doc目录及在doc目录下添加hello.txt文件。
2、在工程目录添加runhello.sh 内容为hello
3、在工程目录添加COPYRIGHT和README
4、修改CMakelists.txt文件添加

INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/t2)
INSTALL(PROGRAMS runhello.sh DESTINATION bin)
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/t2)

5、之后在build目录进行外部编译

cmake -DCMAKE_INSTALL_PREFIX=/tmp/t2/usr ..

然后运行
make
make install
查看安装结果

/tmp/t2

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值