[cmake] 制作一个静态库archive
来源:互联网 发布:js定义数组的方法 编辑:程序博客网 时间:2024/06/06 19:34
学习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_Hvoid 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_staticSET_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}/binLIBRARY DESTINATION lib #如果目标TARGETS中的某个目标是动态库so,就安装到${CMAKE_INSTALL_PREFIX}/libARCHIVE 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.oLinking C static library libcore.a[100%] Built target core_static依然ok,最后执行
make install输出
[100%] Built target core_staticInstall 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 0
- [cmake] 制作一个静态库archive
- [cmake] 使用静态库archive文件
- 静态库Archive
- CMake静态库
- cmake连接静态库
- VC中制作一个静态链接库
- cmake,静态库共享库
- Linux Cmake静态库链接
- cmake 入门编程之编译一个静态库或者动态库
- cmake ---动态库与静态库
- CMake 编译静态库和动态库
- 使用CMake编译跨平台静态库
- CMake - boost - 可执行程序 - 静态库
- CMake 实例学习(四) 构建静态库
- opencv+ linux + cmake 生成 opencv静态库
- 使用CMake编译跨平台静态库
- VS2015+CMake编译OpenCV2.4.13静态库
- 静态库制作
- CLIPS专家系统基本编程手册(一)
- ?: %04d snprintf string(type char) setw(int n) setfill(*)
- week3 归一化
- CSS position 属性
- JS编程训练 | 题1:查找数组元素位置
- [cmake] 制作一个静态库archive
- MyBatis中Like语句使用方式
- 数组相关概念
- LeetCode--Two Sum
- 数组中有一个数字出现的次数超过数组长度的一半
- 常用shell命令(一)
- display:none和visibility:hidden的区别
- oracle12c创建用户scott和ORACLE 12C EM Express 进入方法 (转载)
- 自然语言处理