IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Cmake基础 -> 正文阅读

[开发工具]Cmake基础

CMakeLists.txt

指出源码文件、依赖库所在路径;采用的编译器g++/gcc版本;release还是debug模式编译;是否支持c++11;生成的可执行文件/库文件路径和名称、版本号;指定安装路径。

基本语法
  • 指令是大小写无关的,参数和变量是大小写相关的。但推荐全部使用大写指令。
  • 变量使用 方 式 取 值 , 但 是 在 I F 控 制 语 句 中 是 直 接 使 用 变 量 名 。 如 : {}方式取值,但是在 IF 控制语句中是直接使用变量名。 如: IF使{SRC_LIST}
  • 指令(参数 1 参数 2…) 参数使用括弧括起,参数之间使用空格或分号分开。
    如:ADD_EXECUTABLE(hello main.c func.c)或者
    ADD_EXECUTABLE(hello main.c;func.c)
  • 注释:# comment
一些常量
${PROJECT_SOURCE_DIR}	#表示根目录
${CMAKE_CURRENT_SOURCE_DIR}	#CMakeLists.txt所在目录
${CMAKE_CURRENT_LIST_FILE}	#CMakeLists.txt完整路径
${CMAKE_CURRENT_LIST_LINE}	#CMakeLists.txt当前行
${CMAKE_SOURCE_DIR}	#CMake根目录

CMake常量详解

固定部分
#1.版本要求
cmake_minimum_required(VERSION 3.0.2)

#2.项目名
project(directory_test VERSION 1.0)

#3.编译方式
# CMake中有一个变量CMAKE_BUILD_TYPE,可以取值枚举入下:
# Debug|Release|RelWithDebInfo|MinSizeRel
set(CMAKE_BUILD_TYPE "Debug")

#4.指定编译器
set(CMAKE_C_COMPILER "/usr/local/gcc")
set(CMAKE_CXX_COMPILER "/usr/local/g++")

#5.添加对c++11的支持
add_compile_options(-std=c++11)
#OR set(CMAKE_CXX_FLAGS "-std=c++11")

#6.指定生成的可执行文件路径
set (EXECUTABLE_OUTPUT_PATH  ${PROJECT_SOURCE_DIR}/bin)

#7.指定生成的库路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#8.指定安装路径
install(TARGETS MathFunctions DESTINATION path/lib)#头文件
install(FILES MathFunctions.h DESTINATION path/include)#库
指定头文件搜索路径
#指定源码文件的头文件和库文件的头文件的搜索路径,相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量
include_directories(./include/srcHeadPath)
指定源码文件
# 把所有.cpp源码文件赋值给SOURCES
set(SOURCES  src/a.cpp  src/b.cpp)
# 把src目录下的所有.cpp文件赋值给SOURCES
aux_source_directory(${PROJECT_SOURCE_DIR}/src  SOURCES) 
指定依赖库
#指定链接目录,相当于环境变量中增加LD_LIBRARY_PATH的路径
link_directories(directory1 directory2 ...)	
#指定上述链接目录下需要链接的库
link_libraries(main A.so ...)
##或者target_link_libraries(myProject eng mx)  
#equals to below  
###target_link_libraries(myProject -leng -lmx)  
###target_link_libraries(myProject libeng.so libmx.so)  
生成二进制文件
#在上个步骤中把所有源码文件通过set赋值给SOURCES变量
#可执行程序
add_executable(binaryFile  ${SOURCES})
#库文件:有SHARED|STATIC两种库,指定库的类型
add_library(testStudent SHARED ${SOURCES}) 
link_libraries VS target_link_libraries

target_link_libraries放在add_executable后;link_libraries放在add_executable之前。

target_link_libraries(main A.so B.a C.so)

target_link_libraries里库文件的顺序符合gcc链接顺序的规则,即被依赖的库放在依赖它的库的后面。在上面的命令中,libA.so可能依赖于libB.a和libC.so,如果顺序有错,链接时会报错。

find_package

find_package 是去 CMAKE_MODULE_PATH 中查找 Findxxx.cmake文件,然后在这个文件提供的路径下去寻找相应的库。find_package指令可以得到库文件的绝对路径。find_package(libName REQUIRED),如果找到spdlog库就得到下列值:

  • libName_INCLUDE_DIRS:libName头文件所在文件夹
  • libName_LIBRARY_DIRS:二进制库所在文件夹
  • libName_LIBS:二进制库的名称libName
  • libName_FOUND=true。
# find required opencv
find_package(OpenCV REQUIRED)
# directory of opencv headers
include_directories(${OpenCV_INCLUDE_DIRS})
# name of executable file and path of source file
add_executable(opencv_test src/opencv_test.cpp)
# directory of opencv library
link_directories(${OpenCV_LIBRARY_DIRS})
# opencv libraries
target_link_libraries(opencv_test ${OpenCV_LIBS})
显示相关
# 输出打印构建目录
MESSAGE(STATUS "This is HELLO_BINARY_DIR " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is CMAKE_SOURCE_DIR " ${CMAKE_SOURCE_DIR})
多级CMakeLists.txt文件
#先执行某个子目录下的CMakeLists.txt文件
add_subdirectory()

子目录下的cmakefile.txt文件只需要指明该目录内的源码路径、头文件路径即可

赋值
SET(QT_DONT_USE_QTGUI TRUE)
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 14:14:09  更:2022-01-08 14:15:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/25 9:16:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计