cmake编译安装记录
来源:互联网 发布:python 数据类型typeof 编辑:程序博客网 时间:2024/05/13 08:03
1.类库生成
首先明确文件夹目录结构
t3 ├── build ├── CMakeLists.txt └── lib ├── CMakeLists.txt ├── hello.c └── hello.h
t3/lib下的hello.c和hello.h用来生成库文件。
现在先来编写t3工程目录下的CMakeLists.txt文件:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(HELLOLIB) ADD_SUBDIRECTORY(lib)
添加子目录lib
然后编写lib下的CMakeLists.txt文件:
#如果是多文件,后面可以写成以空格分隔SET(LIBHELLO_SRC hello.c) #添加动态库 ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC}) #添加静态库 ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC}) #生成动态库的版本号 SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1) #将静态库重新命名为hello SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello") #安装静态库和动态库 INSTALL(TARGETS hello hello_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) #安装hello.h ,打包会都包含在so文件中,所以不需要单独安装文件#INSTALL(FILES hello.h DESTINATION include/hello)
//hello.c
#include "hello.h" void HelloFunc() { printf("Hello World\n"); }
//hello.h
#ifndef HELLO_H #define HELLO_H #include <stdio.h> void HelloFunc(); #endif
然后构建:
#用于指定到时候最终安装的目录,/usr/local/lib中内容,每次更新需要重新执行/sbin/ldconfig cd buildcmake -DCMAKE_INSTALL_PREFIX=/usr/localmake make install
查看/usr/local/lib目录结构:
lib/
├── libhello.a
├── libhello.so -> libhello.so.1
├── libhello.so.1 -> libhello.so.1.2
└── libhello.so.1.2
说明已经正常生成。
然后准备部署测试程序进行测试。
2.测试项目生成
新建测试项目目录:
t3test/
t3 ├── build ├── CMakeLists.txt └── src ├── CMakeLists.txt └── main.c
修改根目录CMakeLists.txt
PROJECT(NEWHELLO)ADD_SUBDIRECTORY(src)
修改src中CMakeLists.txt
ADD_EXECUTABLE(main main.c)TARGET_LINK_LIBRARIES(main hello)
编写测试文件main.c
#include <stdio.h> int main() { HelloFunc(); return 0; }
进入build中进行编译生成
cmake ..make
进入build/src中会看到生成的main文件,执行,可以看到生成效果:
./main
如果输出Hello World\n就是成功了!
阅读全文
0 0
- cmake编译安装记录
- cmake编译安装mysql
- cmake的安装编译
- 编译以及安装cmake
- 编译安装cmake
- Linux cmake 编译安装
- cmake编译安装OpenCV
- 源码编译安装cmake (cmake.3.2.3)
- CentOS下安装Cmake记录
- cmake----外部编译与安装
- ubuntu 源码编译安装cmake
- 【Cmake学习笔记】编译安装
- Linux(Redhat)编译安装cmake
- Cmake MySQL5.6 编译安装
- cmake编译安装mysql5.5
- 使用cmake编译安装mysql
- Cmake编译安装MySQL完整版
- cmake源码编译安装jsoncpp
- HDU4280 Island Transport【网络流】
- 安全与加密
- JS如何去掉字符串里面不需要的字符
- 《机器学习算法原理与编程实践》笔记
- 个人训练赛 B Battle SimulationPicture
- cmake编译安装记录
- 记录一些网址
- 一分钟了解"英语表达:强度"
- js 固定某个div在浏览器窗口的位置
- C++ typename的起源与用法
- 虚函数表和多态
- Apache Commons Long ,BeanUtils
- Linux 免密登录配置
- L1-042. 日期格式化