首页 > 其他分享 >CMakeLists.txt 相关工作

CMakeLists.txt 相关工作

时间:2023-07-16 21:56:11浏览次数:36  
标签:SRC CMakeLists CMAKE list SOURCE link 相关 txt DIR

cmake_minimum_required(VERSION 3.15)
project(test)
set(CMAKE_CXX_STANDARD 11)
set(SRC add.cpp test.cpp div.cpp)
set(EXECUTABLE_OUTPUT_PATH /home/dabing/aa/bb/cc)
add_executable(app ${SRC})

#搜索PROJECT_BINARY_DIR参数里的文件cpp .c ,将文件存入SRC变量中,PROJECT_BINARY_DIR是CMakeLists.txt的路径
aux_source_directory(${PROJECT_BINARY_DIR} SRC)

##CMAKE_CURRENT_BINARY_DIR是CMakeLists.txt的路径,找CMAKE_CURRENT_BINARY_DIR路径下的cpp文件
file(GLOB SRC ${CMAKE_CURRENT_BINARY_DIR}/*.cpp)


#实例,文件结构{CMakeLists.txt, build, include, src},利用CMakeLists.txt编译src文件夹下的cpp等文件
#


cmake_minimum_required(VERSION 3.15)
project(test)
#aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC)
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
#指定头文件的路径
include_directories(${PROJECT_SOURCE_DIR}/include)
add_executable(app ${SRC})


#通过CMake制作动态库、静态库
add_library(库名称 STATIC/SHARED [源文件1][源文件2])
#====制作动态库==动态库有可执行权限===
cmake_minimum_required(VERSION 3.15)
add_library(calc SHARED ${SRC})

#====制作静态库====
add_library(calc STATIC ${SRC})

#指定动态、静态库的输出路径 LIBRARY_OUTPUT_PATH
cmake_minimum_required(VERSION 3.15)
set(LIBRARY_OUTPUT_PATH /home/dd/xx/rr)
add_library(calc SHARED ${SRC})


#使用制作的动态、静态库
#首先发布库,需要发布两个库:库文件和函数声明文件
#CMake的链接静态库的命令
#静态库名称可以是掐头、去尾的名字
link_libraries(<静态库名称> [<静态库名称> ...])
#指定静态或动态库的路径
link_directories(<lib_path> [<lib_path>])

cmake_minimum_required(VERSION 3.15)
project(test_link_libraries)
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
include_directories(${PROJECT_SOURCE_DIR}/include)
link_libraries(calc)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
add_executable(app ${SRC})

#=========================================================

#CMake链接动态库
target_link_libraries(
    <target>
    <PRIVATE/PUBLIC/INTERFACE> <item>
)
#target:指定要加载动态库的文件的名字
#       可以是源文件
#       可以是动态库文件
#       可以是可执行文件
#权限是链接库的权限,public是默认权限,动态链接库有传递性,private只能传递一次,
#PUBLIC:在pulbic后边的库会被link到前边的target中,并且里边定义的函数等也会被导出,提供给第三方使用
#PRIVATE:在private后边的库仅被link到前边的target中,并且终结掉,第三方不能感知你调了啥库
#INTERFACE:在interface后面引入的库不会被链接到前边的target中,只会导出定义的函数
cmake_minimum_required(VERSION 3.15)
project(test_link_libraries)
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
include_directories(${PROJECT_SOURCE_DIR}/include)
link_libraries(calc)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
#动态库的directory
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib2)
add_executable(app ${SRC})
#动态库链接要写在最后,因为动态库是在可执行程序调用才会加载动态库
target_link_libraries(app calc)

#========================================================================

#message 日志
message([STATUS][WARNING][AUTHOR_WARING][SEND_ERROR][FATAL_ERROR] "message to display" ...)
#(无):重要消息
#STATUS:非重要消息
#AUTHOR_WARING:CMake 警告
#SEND_ERROR:CMake 错误,继续执行,但会跳过生成的步骤
#FATAL_ERROR:CMake错误,终止所有处理过程

cmake_minimum_required(VERSION 3.15)
project(test_link_libraries)
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
include_directories(${PROJECT_SOURCE_DIR}/include)
message("XXXXXXXXXXXXXXXXXXXXXXX")
link_libraries(calc)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
message(STATUS "XXXXXXXXXXXXXXXXXXXXXXX")
#动态库的directory
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib2)
message(FATAL_ERROR "XXXXXXXXXXXXXXXXXXXXXXX") #会终止make执行
add_executable(app ${SRC})
#动态库链接要写在最后,因为动态库是在可执行程序调用才会加载动态库
target_link_libraries(app calc)


#=====================================================================
#字符串拼接,使用${}将变量中的字符串取出
set(变量名 ${变量名1} ${变量名2} ...)

set(tmp hello world)
set(tmp1 ${tmp} ${SRC})
message(${tmp})
message(${tmp1})
#================================================
#字符串追加,list是变量
list(APPEND <list> [<element> ...])

list(APPEND tmp "xxx1" "sss2" ${SRC})
message(${tmp})
#===================================================
#字符串移除,删除某一个子字符串,拼接后的字符串以;分割,删除的字符串要全部匹配
list(REMOVE_ITEM <list> [<value> ...])
#删除子字符串main.cpp
list(REMOVE_ITEM SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
#========================================================

#获取列表的长度,
list(LENGTH <list> <output variable>)
#LENGTH:指定命令类型,获取列表长度
#<list>:当前操作的列表
#<output variable>:新创建的变量,用于存储列表的长度。



#==========================================================
#读取列表中指定索引的元素,可以指定多个索引
list(GET <list> <element index> [<element index> ...])
#<list>:当前操作的列表
#<element index>:列表元素的索引,从0开始编号;
#索引可以为负数,-1表示列表最后一个元素,-2为倒数第二个;索引超出列表长度会报错
#<output variable> 新创建的变量,存储指定索引元素的返回结果
#==========================================================
#将列表中的元素用连接符连接成一个新字符串
list(JION <list> <glue> <output variable>)
# list: 当前操作的列表
# glue: 指定的连接符
# output variable:新创建的变量,存储返回的字符串
#============================================
#查找列表是否存在指定元素,若没有找到则返回-1
list(FIND <list> <value> <output variable>)
# list: 当前操作列表
# value: 需要在列表搜索的元素
# output variable:新创建的变量

#========================================
#在列表中指定的位置插入若干元素
list(INSRT list <element_index> <element> [<elelment> ...])

#=========================================
#将指定索引的元素从列表中移除
list(REMOVE_AT <list> <index> [<index> ...])

#=================================================
#移除列表中的重复元素
list(REMOVE_DUPLICATES <list>)

#===========================================
#列表翻转
list(REVERSE <list>)

#===========================================
#列表排序
list(SORT <list> [COMPARE <compare>] [CASE <case>] [ORDER <order>])
#COMPARE:指定排序方法。STRING:按照子母顺序排序;FILE_BASENAME:使用basename排序;MATURAL:s使用自然数排序
#CASE:指明是否大小写敏感。SENSITIVE:按照大小写敏感方式排序,默认值;INSENSITIVE:按照大小写不敏感方式排序
#ORDER:指明排序的顺序。ASCENDING:按照升序排序,默认;DESCENDING:按照降序方式排序


#================================================================
#自定义宏
add_definitions(-D<宏>)

#================================================================
#CMakeLists文件嵌套
add_subdirectory(source_dir)
#source_dir 是指子CMakeLists所在位置的目录

  

标签:SRC,CMakeLists,CMAKE,list,SOURCE,link,相关,txt,DIR
From: https://www.cnblogs.com/gishuanhuan/p/17558650.html

相关文章

  • php 相关
    琐碎经验类的php怎么获取body体的数据1. //如果post来的数据用下面的方式来获取$res_tmp=file_get_contents("php://input"); 1.严格来说可以获取任意方式的数据POSTPUT等等......
  • linux用户用户组,用户管理以及相关命令
    linux系统中,最大权限用户的账户名为:root(超级管理员)1.命令行切换用户su[-][用户名]符号-可选,表示切换用户后是否修改环境变量,建议带上用户名省略默认切换root切换后可以使用exit回退上一个用户,也可使用ctrl+d普通用户的权限,一般在其HOME内不受限一旦出了HOME目录,大多数地方是......
  • QT——QTreeView相关操作
    1、判断是否为根节点QModelIndexcurrentIndex=treeView->currentIndex();QStandardItem*currentItem=model->itemFromIndex(currentIndex);//如果是根目录,是否存在父节点来判断是否为根目录boolisRootItem=(currentItem->parent()==nullptr);2、存储并获取数据......
  • 传输层相关简述
    TCP协议特性工作在传输层面向连接协议全双工协议半关闭错误检查将数据打包成段,排序确认机制数据恢复,重传(超时重传)流量控制,滑动窗口TCP报文格式源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只......
  • 矩阵相关模板
    矩阵快速幂#include<cstdio>#include<cstring>#include<algorithm>#include<set>#include<cmath>usingnamespacestd;constintN=150;constintmod=1e9+7;typedeflonglonglld;inlineintread(){ registerintw=......
  • python怎么计算txt行数
    解决问题:如何使用Python计算一个文本文件的行数?要解决这个问题,我们需要使用Python编写一个程序来读取文本文件并计算其行数。下面是一个简单的解决方案,我们将会使用Python的内置函数来完成这个任务。需要的工具Python编程环境(可以使用Anaconda、JupyterNotebook等工具)文本编......
  • 递归相关知识2
    递归相关知识2多路递归--斐波那契额数列importjava.util.Arrays;//递归求斐波那契第n项publicclassfeibonaqie{publicstaticintfibonacci(intn){int[]cache=newint[n+1];Arrays.fill(cache,-1);cache[0]=0;cache[1]=1;//......
  • devicecensus.exe 是 Windows 操作系统中的一个进程,它与设备普查相关。设备普查是 Win
    devicecensus.exe是Windows操作系统中的一个进程,它与设备普查相关。设备普查是Windows操作系统收集和报告硬件和软件信息的一项功能。具体来说,devicecensus.exe是Windows的设备普查服务的主执行文件。它负责定期运行设备普查任务,收集系统的硬件配置、驱动程序信息、应用......
  • RabbitMQ相关
    1、mq安装:https://blog.csdn.net/sushipenglove/article/details/866690652、镜像集群:https://blog.51cto.com/u_15477117/4905546注意镜像集群修改主机名称后需要重新连接,才可以生效; 过程中相关命令参考:--------------------------------------------------------firew......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-7-浏览器的相关操作
    1.简介上一篇已经将playwright的元素定位大法基本介绍的差不多了,但是在Web的UI自动化的测试中,我们通常需要使用一些方法来操作浏览器,今天就跟随学习了解一下。这一篇宏哥主要是介绍一下,在自动化测试的时候,我们常见的一些浏览器操作有哪些,宏哥将会一一介绍和讲解。2.层级在介绍......