[cmake] 制作一个静态库archive

学习cmake的原因:

最近又捣鼓cmake了,源于浏览github的时候,发现很多项目都是必须由cmake安装,感觉是大势所趋啊。同时也接触了autotools,qmake,scons等其他的构建工作,不过感觉还是cmake简单,高效。因为,居然仅花了半天时间就成功的把项目由qmake切换到cmake了,还没有什么大错误,真是太神奇了。一开始看见cmake,很畏惧,因为cmake的语句好抽象,难理解。但是,只要花上一段时间去认真的手把手地操练一遍,基本的项目配置就不是什么大难题了。那些高级的cmake配置,我看是用的机会比较少。

就先以一个制作archive来开始吧。

目录结构:

.
└── t1
    ├── build
    ├── CMakeLists.txt
    └── src
        ├── CMakeLists.txt
        ├── core.c
        └── core.h
今天就在t1目录下进行操练。

src目录就是我们放置源代码的目录,build目录是执行cmake命令的目录,而与src,build同级的CMakeLists.txt文件是整个项目的管理文件

代码:

core.h

#ifndef CORE_H
#define CORE_H

void core_help();

#endif
简单的不能再简单的一个头文件
core.c

#ifndef CORE_H
#	include "core.h"
#endif

#include <stdio.h>

void core_help()
{
	printf("my help\n");
}
依然如此简单

src/CMakeLists.txt

AUX_SOURCE_DIRECTORY(. all_sources)#将当前目录(.)下的所有源文件(c或者cpp)加入到变量all_sources中

ADD_LIBRARY(core_static ${all_sources})#我们期望使用变量all_sources中的文件去生成一个archive文件core_static

SET_TARGET_PROPERTIES(core_static PROPERTIES OUTPUT_NAME "core")#为这个archive文件设置一个命令
                                                                #(设置了之后,生成的文件名就是libcore.a而不是libcore_static.a)

INSTALL(TARGETS core_static #可以在core_static后面以空格添加多个目标
	RUNTIME DESTINATION bin #如果目标TARGETS中的某个目标是2进制可执行程序,就安装到${CMAKE_INSTALL_PREFIX}/bin
	LIBRARY DESTINATION lib #如果目标TARGETS中的某个目标是动态库so,就安装到${CMAKE_INSTALL_PREFIX}/lib
	ARCHIVE DESTINATION libstatic #如果目标TARGETS中的某个目标是静态库archive,就安装到${CMAKE_INSTALL_PREFIX}/libstatic
)#在执行make install命令后,将期望的文件安装到期望的目录中去
 #CMAKE_INSTALL_PREFIX的值是什么?请看下文
INSTALL(FILES core.h DESTINATION include)#同上,${CMAKE_INSTALL_PREFIX}/include
看起来,生成一个archive的所需要的语句很简单。

外面的CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)#指定版本,若cmake版本低于2.6,直接报错退出
PROJECT(CORE)#为工程起个名字
ADD_SUBDIRECTORY(src constuct)#填加子目录src,并为它在构建后的目录命名为constuct。添加多个子目录就有多个ADD_SUBDIRECTORY语句

执行:

在build目录下执行

cmake -DCMAKE_INSTALL_PREFIX=. ..#在这儿指定了未来的安装目录为执行cmake命令的当前目录,而后面的..表示cmake要执行的CMakeLists.txt在上级目录(out of source)
输出

-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/hu/project/test_cmake/t1/build
看见了很多done,表示没什么问题,接着执行

make

输出

Scanning dependencies of target core_static
[100%] Building C object constuct/CMakeFiles/core_static.dir/core.c.o
Linking C static library libcore.a
[100%] Built target core_static
依然ok,最后执行

make install
输出

[100%] Built target core_static
Install the project...
-- Install configuration: ""
-- Installing: /home/hu/project/test_cmake/t1/build/libstatic/libcore.a
-- Installing: /home/hu/project/test_cmake/t1/build/include/core.h
看到,安装了我们期望的文件

看一下build目录下的文件

CMakeCache.txt  CMakeFiles  cmake_install.cmake  constuct  include  install_manifest.txt  libstatic  Makefile

接下来就是如何使用archive了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值