CMake 构建项目教程-简介
CMake 构建项目教程-简介
Linux 平台构建项目,选择了CLion作为C++的IDE,而CLion默认就是使用CMake构建项目,所以这里记录了CMake在构建项目过程的一些小知识。
1. 项目的目录结构如下所示,包括静态库和动态库项目,同时也包括一个测试项目。
.
├── bin
│ └── test1
├── CMakeLists.txt
├── include
│ └── apple.h
├── lib
│ ├── liblearn.a
│ ├── liblearn.so -> liblearn.so.
│ ├── liblearn.so. -> liblearn.so.1.0
│ └── liblearn.so.1.0
├── src
│ ├── apple.cpp
│ └── CMakeLists.txt
└── test
├── CMakeLists.txt
└── main.cpp directories, files
bin 可执行文件的生成目录,lib 链接库文件的生成目录,include 头文件所在目录,src 源代码文件所在目录,test 测试程序源代码所在目录。
2. . 根目录 CMakeList.txt
cmake_minimum_required(VERSION 3.5)
project( cmake_learn )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_subdirectory( src )
add_subdirectory( test )
3. src 目录 CMakeList.txt
# 搜集所有在指定路径下的源文件的文件名,将输出结果列表储存在指定的变量中。
aux_source_directory(. SOURCE_FILES ) # 或者使用下面这种方式。
#set( SOURCE_FILES
# apple.cpp
# orage.cpp ) # 添加包含目录,CMake将在这些目录寻找 .cpp 文件中引用到的头文件。
include_directories( ${PROJECT_SOURCE_DIR}/include ) # 指定编译后的库文件的输出路径。
set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib ) # 生成目标动态库。
add_library( learn SHARED ${SOURCE_FILES} ) # 生成目标静态库。
add_library( learn_static STATIC ${SOURCE_FILES} ) # 指定静态库的输出名称。
set_target_properties( learn_static PROPERTIES OUTPUT_NAME "learn" ) # 允许静态库与动态库同时存在。
set_target_properties( learn PROPERTIES CLEAN_DIRECT_OUTPUT )
set_target_properties( learn_static PROPERTIES CLEAN_DIRECT_OUTPUT ) # 指定动态库的版本:
# VERSION 动态库版本;
# SOVERSION API的版本。
set_target_properties( learn PROPERTIES VERSION 1.0 SOVERSION )
4. test 目录 CMakeList.txt
# 搜集所有在指定路径下的源文件的文件名,将输出结果列表储存在指定的变量中。
aux_source_directory(. SOURCE_FILES )
# 添加包含目录,CMake将在这些目录寻找 .cpp 文件中引用到的头文件。
include_directories( ${PROJECT_SOURCE_DIR}/include ) # 指定编译后的可执行程序的输出路径。
set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin ) # 指定生成可执行程序。
add_executable( test1 ${SOURCE_FILES} ) # 添加链接库目录,CMake将在如下如目录中查找所链接的外部库。
link_directories( ${PROJECT_SOURCE_DIR}/lib ) # 指定链接库。
target_link_libraries( test1
learn )
6. 总结
目录树种使用的 h cpp 文件都是测试代码,并不重要,关键是分析清楚 CMake 是怎样嵌套的互相关联的,编译后生产的静态库与动态库都按预期出现在了 lib 目录中,测试的可执行文件也 生成在了 bin 目录中。
CMake 构建项目教程-简介的更多相关文章
- 在Qt Creator中创建C++工程并使用CMake构建项目
创建完毕后,若电脑上没有安装CMake,则无法构建工程, 我用的是绿色版,官网下载地址:https://cmake.org/files/v3.10/cmake-3.10.1-win64-x64.zip ...
- 用CMake 构建Qt 项目
译:用CMake构建Qt项目作者: Johan Thelin 译者:赖敬文原链接:http://developer.qt.nokia.com/quarterly/view/using_cmake_t ...
- CMake快速入门教程-实战
http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/detai ...
- 转:CMake快速入门教程-实战
CMake快速入门教程:实战 收藏人:londonKu 2012-05-07 | 阅:10128 转:34 | 来源 | 分享 0. 前言一个多月 ...
- 在 linux 下使用 CMake 构建应用程序
学习cmake http://xwz.me/wiki/doku.php?id=cmake 碰到的一些问题: 1.You have changed variables that require your ...
- 【经验分享】win10 cmake 构建 Tengine 工程
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 本教程详细记录了在 win10 环境中 ...
- [ionic开源项目教程] - 第12讲 医疗模块的实现以及Service层loadMore和doRefresh的提取封装
关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 这一讲主要实现tab2[医疗]模块,[医疗]模块跟tab1[健康]模块类似. [ionic开源项目教程] - 第12讲 医疗 ...
- Windows Phone 8初学者开发—第10部分:数据绑定应用程序和透视应用程序项目模板简介
原文 Windows Phone 8初学者开发—第10部分:数据绑定应用程序和透视应用程序项目模板简介 原文地址: http://channel9.msdn.com/Series/Windows-Ph ...
- VisualGDB:使用VS创建CMake Linux项目
转载地址:点击打开链接 根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 本文介绍如何使用 ...
随机推荐
- Python xml模块
xml模块 自己创建xml文档 import xml.etree.cElementTree as ET new_xml = ET.Element("personinfolist") ...
- 剑指offer(47)求1+2+3+...+n
题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 题目分析 不能用乘除也就不能用公示了,并且不能 ...
- CSS实现输入框宽度随内容自适应效果
有时候我们会遇到如下需求:输入框的宽度随内容长度自适应,当输入框宽度增大到一定值时,里边的内容自动隐藏. 面对这种需求,我们首先想到的是使用input元素标签,但是发现input标签的宽度默认设定的是 ...
- 两个python安装模块后 ImportError: No module named
问题描述:我的电脑安装了默认的arcgis自带的python,还自己安装了anaconda,所以有两个位置的python2.7 我自己使用arcgis的程序的时候,调用默认的那些是可以用的,但想使用d ...
- 使用echarts时option可以复用的方法
其实复用option很简单,在所要展示的图形在其他需求大致一致时,即可写一个option然后设置不同的地方就好了,坐标轴.series等都可以设置,具体代码如下: var barLeft = echa ...
- 误操作yum导致error: rpmdb
error: cannot open Packages index using db5 - (-30973) error: cannot open Packages database in /var ...
- Coding daily
@2017-7月 1可视化控件的awakeFromNib不调用? 因为用代码注册了cell 2scrollView添加子控件布局无效? 最好不要用masonry,直接用frame 还有tableVie ...
- linux存储管理之磁盘阵列
磁盘阵列 RAID ====================================================================================RAID:廉 ...
- POJ-3233 Matrix Power Series 矩阵A^1+A^2+A^3...求和转化
S(k)=A^1+A^2...+A^k. 保利求解就超时了,我们考虑一下当k为偶数的情况,A^1+A^2+A^3+A^4...+A^k,取其中前一半A^1+A^2...A^k/2,后一半提取公共矩阵A ...
- httpd常见配置
httpd常见配置 配置文件 /etc/httpd/conf/httpd.conf 主配置文件 /etc/httpd/conf.d/*.conf 辅助配置文件 配置文件语法检查及重新加载配置文 ...