python大型项目开发规范_大型项目CMakeLIsts.txt的编写规范
1、Very simple executable
PROJECT( helloworld ) # 非必需
SET( hello_SRCS hello.cpp )
ADD_EXECUTABLE( hello ${hello_SRCS} )
1
2
3
说明:
ADD_EXECUTABLE creates an executable from the listed sources
Tip: add sources to a list (hello_SRCS), do not list them in ADD_EXECUTABLE
2、Very simple library
PROJECT( mylibrary ) #非必需
SET( mylib_SRCS library.cpp )
ADD_LIBRARY( my SHARED ${mylib_SRCS} )
1
2
3
说明:
ADD_LIBRARY creates an static library from the listed sources
Add SHARED to generate shared libraries (Unix) or dynamic libraries (Windows)
不加SHARED 生成.a 静态库,加了SHARED ,生成.so 动态链接库
3、Process a list
FOREACH(loop_var)
...
ENDFOREACH(loop_var)
1
2
3
4、3rd party or .h
If the 3rd party library or .h is in a “standard”:
directory (PATH and/or LD_LIBRARY_PATH) is automatic
If in a nonstandard dir:
Headers: use INCLUDE_DIRECTORIES
Libraries: use FIND_LIBRARY and link with the result of it
cmake_minimum_required(VERSION 2.8)
project (faceIdentification)
file(GLOB_RECURSE srcs ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -std=c++11 -O2")
find_package(Caffe)
include_directories(
${PROJECT_SOURCE_DIR}/include
${Caffe_INCLUDE_DIRS})
add_definitions(${Caffe_DEFINITIONS})
foreach(source ${srcs})
get_filename_component(name ${source} NAME_WE)
add_executable(${name} ${source})
target_link_libraries(${name}
${PROJECT_SOURCE_DIR}/lib/libviplnet.so
${Caffe_LIBRARIES})
endforeach(source)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
附录
1、几种常用的库的CMakeLists.txt
boost
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.45.0 COMPONENTS *boost libraries here*)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(progname file1.cxx file2.cxx)
target_link_libraries(progname ${Boost_LIBRARIES})
endif()
# 将*boost libraries here* 替换为你需要的boost子库 ,如:filesystem 等
1
2
3
4
5
6
7
8
9
10
11
protobuf 链接库
include(FindProtobuf)
find_package(Protobuf REQUIRED)
include_directories(${PROTOBUF_INCLUDE_DIR})
...
target_link_libraries(progname
${PROTOBUF_LIBRARY}
)
1
2
3
4
5
6
7
protobuf 用 protoc 编译xxx.proto 文件生成cpp与.h
cmake_minimum_required(VERSION 2.8)
set(CMAKE_VERBOSE_MAKEFILE ON)
find_package(Protobuf REQUIRED)
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS Express.proto)
add_library(foo ${PROTO_SRCS} ${PROTO_HDRS})
target_link_libraries(foo ${PROTOBUF_LIBRARIES} pthread) #foo 链接 protobuf与pthread
1
2
3
4
5
6
7
OpenCV
find_package(OpenCV REQUIRED)
message(${OpenCV_INCLUDE_DIRS}) # 非必需
message(${OpenCV_LIBS}) # 非必需
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(progname
${OpenCV_LIBS}
)
#或者可以设置一个非常有用的宏变量 OpenCV_DIR="your/path/include/OpenCVConfig.cmake file"
1
2
3
4
5
6
7
8
9
OpenMP
find_package(OpenMP REQUIRED)
if (OPENMP_FOUND)
message("found")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()
1
2
3
4
5
6
7
2、多级目录下的CMakeLists.txt
.
├── CMakeLists.txt #顶层目录下
├── include
│ ├── demo.h
│ └── detec.h
├── lib
├── src
│ ├── demo.cpp
│ ├── detec.cpp
│ └── proto
│ ├── CMakeLists.txt #子目录
│ └── myProto.proto
└── tools
└── pipe.cpp
#只需在顶层CMakeListst.txt 加上如下两句话,就会自动执行子目录下的CMakeLists.txt
add_subdirectory(${PROJECT_SOURCE_DIR}/src/proto)
include_directories(${PROJECT_BINARY_DIR}/src/proto)
---------------------
作者:_小马奔腾
来源:CSDN
原文:https://blog.csdn.net/dongfang1984/article/details/55105537
版权声明:本文为博主原创文章,转载请附上博文链接!
python大型项目开发规范_大型项目CMakeLIsts.txt的编写规范相关推荐
- python项目开发计划_开源项目 | 企业微信第三方Python SDK项目启动计划
各位知友大家好!我是量潮科技创始人 @iGuo ,这篇文章和大家分享我们公司目前的一些技术进展和一些开源项目的规划. 在技术方面,我们目前还处在搭建平台的早期阶段:在架构完善以后,我会专门写一篇文章介 ...
- 项目开发流程_绿维文旅:旅游项目开发模式与流程
一.旅游项目开发模式 旅游综合开发是立足旅游项目自有资源基础,以旅游产业为主导,以市场为导向,以资本为驱动,以资源整合为核心,通过集中土地.资本.技术.交通.劳动力等生产要素,推进土地开发.交通建设. ...
- 项目开发经验谈之:项目到底谁说了算
项目开发经验谈:项目的到底谁说了算 前言:项目到底是为谁而做,一个项目的成功到底是怎么样在评价:是领导阶层肯定,还是客户满意? 系列文章链接 项目开发经验谈:如何成为出色的开发人员 盲目的项目开发 ...
- go语言Web开发框架:项目开发介绍及实战项目介绍
引言 本系列课程我们将学些Golang语言中的Web开发框架Iris的相关知识和用法.通过本系列视频课程,大家能够从零到一经历一个完整项目的开发,并在课程中了解实战项目开发的流程和项目设涉及的各个模块 ...
- python项目开发计划_面向中级 Python 开发人员的 13 个项目构想
建立信心:无论项目的复杂程度如何,你都会更加相信自己创建软件的能力. 探索其他技术:你将了解构建完整产品所需的其他技术,如数据库.服务器和其他语言. 更好地理解编程概念:你将学习更好地编写代码,并了解 ...
- python开发商城实战视频_商城项目实战_商城项目实战教程_商城项目实战视频教程 _课课家...
本套餐将包括两个重磅性的课程与一个赠送学习的课程,分别为SpringBoot实战视频教程与RabbitMQ实战教程跟SSM整合开发之poi导入导出Excel.目的是为了让各位小伙伴可以从零基础一步一个 ...
- python线上编辑问题_大型线上项目中动态语言诸多问题之二 -- 以 Python 语言为例...
第一个问题:Mutable对象被误改 这个是在线上环境出现过的一个BUG 事后说起来很简单,服务端数据(放在dict里面的)被意外修改了,但查证的时候也花了许多时间,伪代码如下: def routin ...
- 软件项目开发模式_小晓_同学__新浪博客
螺旋开发模式:部分模块开发还可以再继续开发别的模块,适合于项目前期需求不确定的情况 对于每一个模块一个个开发:分析.设计.编码.测试.上线: 好处:有效的降低软件项目风险,(做出的产品要尽量满足客户需 ...
- 最新《老男孩Python全栈开发15期VIP项目实战》
下载地址: 百度网盘 ├─day01 │ │ 01(1).pdf │ │ 01.pdf │ │ │ ├─code │ │ 01 今日主要内容 │ │ 01 今日 ...
最新文章
- hive查看数据库里库的信息_hive 查看当前数据库
- 史上最全的女人坐月子注意事項
- 熵值法确定权重(matlab附代码)
- 如何使用PowerShell保护密码
- c语言输入相应的成绩评定信息,C语言机练习题记答案.doc
- CentOS 8源码安装Zabbix5.0
- SQL Where子句
- [C/C++][经典探讨]类继承中,通过基类指针delete释放,是否会造成内存泄漏
- 程序员要么在变来变去中成长,要么在变来变去中被淘汰,要么主动去适应变来边去的事实...
- 替代传统C/S和B/S技术的下一代客户/服务器编程技术
- 计算机视频剪辑教程,一个小白也能学会的剪辑教程
- 计算机新生导论感言,新生入学感言范文精选
- 机器学习案例之_金融反欺诈预测
- 抖音小程序Tiktok开发教程之 基础组件 04 icon 图标组件
- 《高性能MySQL》 第三章 服务器性能剖析 读书笔记
- 全基因DNA甲基化检测“金标准”--- 改进版简化基因组甲基化测序
- 超入门级-基于中值滤波处理ECG信号的基线漂移-Python-MIT-BIH数据集
- 《剩女郎》的艺术魅力
- Freedom of Choice URAL - 1517
- 个人简历——各类奖学金、各种称号、各种职位中英文对照: