栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

cmake学习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

cmake学习

参考资料

CMake Tutorial:https://cmake.org/cmake/help/latest/guide/tutorial/index.html
CMake 社区:https://discourse.cmake.org/
CMake wiki:https://gitlab.kitware.com/cmake/community/-/wikis/home
CMake 实践:http://file.ncnynl.com/ros/CMake%20Practice.pdf
CMake 如何入门 知乎:https://www.zhihu.com/question/58949190/answer/161788340
CMakeLists.txt 语法介绍与实例演练:https://blog.csdn.net/afei__/article/details/81201039
Linux 编译工具 gcc/g++、Make/Makefile、CMake/CMakeLists.txt、qmake:https://www.cnblogs.com/dinghongkai/p/11316528.html
makefile介绍:https://seisman.github.io/how-to-write-makefile/introduction.html

上手例子
https://github.com/ttroy50/cmake-examples
https://github.com/SFUMECJF/cmake-examples-Chinese

认识cmake

cmake是什么?
写c++代码时候,从源代码到可执行程序,需要经历三个阶段:编写源码 -> 源码编译 -> 链接;
在linux系统上开发程序,通常用g++进行编译&链接,对于简单的项目,直接调用g++是可行的,对于复杂的项目,则需要通过Make(通过Makefile调用g++实现编译)进行批处理,然而写Makefile比较麻烦,所以可以通过CMake工具,依据CMakeLists.txt生成Makefile。

CMake 是跨平台编译工具,依据规则文件 CMakeLists.txt 生成 Makefile。

GCC/G++ 一般用于单个源文件的编译,当一个工程有多个源文件时,再用 GCC/G++ 逐个编译效率太低,所以出现 make 工具。
Make 相当于一个批处理命令,本身没有编译功能,通过 makefile 规则文件调用 GCC/G++ 或其他命令来编译和链接。当工程较大时,手写 makefile 比较麻烦;且在不同平台下编译时,需重新修改 makefile 文件,十分麻烦,因而 CMake 应运而生。
CMake 是一个跨平台的编译工具,通过规则文件 CMakeLists.txt 生成 Makefile 文件,CMakeLists.txt 文件需要自己去写。

cmake能做什么?
用户可以避免直接写Makefile,转而写更简单的CMakeLists.txt,来帮助我们对大型项目进行编译管理。

外部编译方式
cmake推荐使用外部编译方式,需要先在目录hello下新建一个目录build(也可以是其他任何目录名),然后执行以下步骤

mkdir src # 源代码路径,包含CMakeLists.txt文件
cd src && mkdir build
cd build
cmake ..
make # 编译链接,生成可执行文件;或者make -j, make -j install (前提Makefile有对应install)

以hello world为例

#include

using namespace std;

int main(){
    cout << "hello world" < 

文件组织形式如下:

hello/
|– CMakeLists.txt
|– build /
|– hello.cc

cmake还可以直接在当前目录进行编译,无须建立build目录。但是,这种做法会将所有生成的中间文件和源代码混在一起,而且cmake生成的makefile无法跟踪所有的中间文件,即无法使用”make clean; make distclean”命令将所有的中间文件删除。因此,我们推荐建立build目录进行编译,所有的中间文件都会生成在build目录下,需要删除时直接清空该目录即可。这就是所谓的外部编译方式。

cmake语法

CMake 支持大写、小写和大小写混合命令

常见命令

cmake_minimum_required(VERSION 3.10)  # cmake版本号
# set the project name and version
project(Tutorial VERSION 1.0)
# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 该指令的作用为将目标文件与库文件进行链接, 可直接使用库文件的相对路径或绝对路径
# 是指通过add_executable()和add_library()指令生成已经创建的目标文件
target_link_libraries(undistort B.a C.so ${OpenCV_LIBS})
# 将指定的源文件生成链接文件,然后添加到工程中去,
# 比如add_library(undist, src/main.cpp, src/undistort.cpp) 库可以包含多个文件
add_library( [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[source1] [source2] [...])
add_library(common STATIC util.cpp) # 生成静态库
add_library(common SHARED util.cpp) # 生成动态库或共享库
add_executable(demo demo.cpp) # 生成可执行文件
# add_library 默认生成是静态库,通过以上命令生成文件名字,
# 在 Linux 下是:
# demo
# libcommon.a
# libcommon.so
set(SRC_LIST main.cpp)  # set 直接设置变量的值
set(SRC_LIST ${SRC_LIST} test.cpp)  # set 追加设置变量的值
add_executable(demo ${SRC_LIST})  # 生成可执行文件
# 指定要链接的库文件的路径
link_directories(path)

aux_source_directory(dir VAR) # 发现一个目录下所有的源代码文件并将列表存储在一个变量中。
aux_source_directory(. SRC_LIST) # 搜索当前目录下的所有.cpp文件


其他
查看opencv安装

pkg-config opencv --modversion
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767940.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号