
C++/CMAKE
文章平均质量分 50
C++/CMAKE
u013250861
这个作者很懒,什么都没留下…
展开
-
CMAKE:-fPIC参数
使用 CMake 添加-fPIC是非常灵活的,你可以根据项目的需求选择不同的方法来确保生成位置无关代码。如果你的项目需要生成共享库,那么添加-fPIC是一个好习惯,以确保共享库的兼容性和可移植性。原创 2024-08-10 21:56:27 · 1155 阅读 · 0 评论 -
CMake1-1:CMake概述【比MakeFile高级的编译器(Level-2)】【跨平台、开源的构建系统】【跨平台编译工具,比make更为高级,使用起来更方便】【CMakeLists.txt】
语法:project(projectname [CXX] [C] [Java])# 指定工程名为HELLOWORLD project(HELLOWORLD)语法:set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])# 定义SRC变量,其值为main.cpp hello.cpp set(SRC main.cpp hello.cpp)原创 2022-05-28 13:19:00 · 722 阅读 · 0 评论 -
CMake1-2:CMakeLists.txt最小配置示例
由于cmake仍在不断发展,每个版本均会修改一些函数参数,也会添加更多函数。如上面所讲,每个cmake项目均应当声明此关键字,这影响了整个项目的属性。对应的cmake函数会使用该名称自动提取函数需使用的属性值。由于一个项目中可能包含多个库或多个可执行程序,在子库/子可执行程序中禁止使用与该函数声明中的相同的名称。target在cmake中是一个很重要的概念,你应当将它理解为一个object。该函数声明了添加一个库或添加一个可执行程序。注意:声明的代码类型影响了编译器的选取。该函数声明了此项目的名称。原创 2022-11-20 10:49:41 · 342 阅读 · 0 评论 -
CMake1-3:CMake工作原理、安装
一、CMake工作原理二、CMake安装原创 2024-06-08 09:14:01 · 125 阅读 · 0 评论 -
CMake1-4:静态库编译、动态库编译(生成库文件)【add_library(xlog STATIC xlog.cpp xlog.h)】【利用关键字STATIC/SHARED指定生成静/动态库】
【代码】CMake1-3:静/动态库编译、静/动态库链接【add_library(xlog STATIC xlog.cpp xlog.h)】【利用关键字STATIC/SHARED指定生成静/动态库】原创 2024-05-30 00:23:33 · 366 阅读 · 0 评论 -
CMake1-5:静/动态库链接【①include_directories()库的头文件路径;②link_directories()库文件路径;③target_link_libraries()库名称】
其中打印出的“Create XLog”是静态库 xlog/build/libxlog.a 的函数打印出的结果。原创 2024-06-08 09:53:44 · 269 阅读 · 0 评论 -
CMake1-5:静/动态库编译&链接同时进行
【代码】CMake1-5:静/动态库编译&链接同时进行。原创 2024-06-08 10:32:07 · 231 阅读 · 0 评论 -
CMake2-变量1:变量基本语法【设置变量:set(VAR1 “测试变量VAR1的值“)】
【代码】CMake-变量1:变量基本语法【设置变量:set(VAR1 "测试变量VAR1的值")】原创 2024-06-02 12:26:11 · 387 阅读 · 0 评论 -
CMake2-变量2:使用变量让message输出不同的颜色
二、使用变量让message输出不同的颜色原创 2024-05-30 18:58:38 · 490 阅读 · 0 评论 -
CMake2-变量4-常用内置变量0:CMake官方内置变量(所有)
Note。原创 2024-06-08 18:46:46 · 989 阅读 · 0 评论 -
CMake2-变量3:cmake内建变量【①提供信息的变量(PROJECT_NAME);②改变行为的变量;③描述系统的变量(MSVC、WIN32、UNIX);④控制构建过程的变量】
CMAKE_COLOR_MAKEFILE 是否生成makefile的颜色,默认是ON。设置CMAKE_COLOR_MAKEFILE为OFF。原创 2024-06-02 12:24:34 · 378 阅读 · 0 评论 -
CMake2-变量4-常用内置变量1:CMAKE_SOURCE_DIR【顶层CMakeLists.txt所在目录】、CMAKE_CURRENT_SOURCE_DIR【当前CMakeLists.t目录】
PROJECT_SOURCE_DIR/CMAKE_SOURCE_DIR/_SOURCE_DIR: 为包含PROJECT()命令的最近一个CMakeLists.txt文件所在的文件夹路径。以上两变量在新版本中已被`CMAKE_RUNTIME_OUTPUT_DIRECTORY`和`CMAKE_ARCHIVE_OUTPUT_DIRECTORY`代替。PROJECT_BINARY_DIR/CMAKE_BINARY_DIR/_BINARY_DIR: 运行cmake命令的目录,即工程编译发生的路径。原创 2022-11-12 17:40:27 · 1854 阅读 · 0 评论 -
CMake2-变量4-常用内置变量7:CMAKE_CURRENT_LIST_DIR【当前*.cmake文件所在路径】
CMAKE_CURRENT_LIST_DIR【当前CMakeLists.txt文件所在路径】原创 2024-06-08 19:40:46 · 1087 阅读 · 0 评论 -
CMake2-变量4-常用内置变量2:CMAKE_BINARY_DIR【构建树的顶层路径】、CMAKE_CURRENT_BINARY_DIR【当前正在处理的二进制目录的路径】
and。原创 2024-06-08 18:40:34 · 836 阅读 · 0 评论 -
CMake2-变量4-常用内置变量3:PROJECT_SOURCE_DIR【当前工程的源码目录】、PROJECT_BINARY_DIR【】
的默认值为项目根目录的路径(CMakeLists.txt所在的路径)。是CMake内置变量之一,它代表当前项目。命令指定项目名称时,CMake会自动设置。如果你使用的是子目录。将会是子目录的路径。原创 2024-06-08 18:48:08 · 1043 阅读 · 0 评论 -
CMake2-变量4-常用内置变量4:预定义变量、环境变量、系统信息、主要开关选项
主要有隐式定义和显式定义两种,举⼀个隐式定义的例⼦,就是 PROJECT 指令,他会隐式的定义_BINARY_DIR 和_SOURCE_DIR 两个变量。⽽显式定义的例⼦,可以使⽤ SET 指令,就可以构建⼀个⾃定义变量了。原创 2022-11-19 12:32:34 · 3397 阅读 · 0 评论 -
CMake2-变量4-常用内置变量5:CMAKE_INSTALL_PREFIX【cmake内置变量,用于指定cmake 执行install目标时,安装的路径前缀。】【默认值:/usr/local】
CMAKE_INSTALL_PREFIX 为cmake内置变量,用于指定cmake 执行install目标时,安装的路径前缀。原创 2022-11-20 10:49:13 · 2023 阅读 · 0 评论 -
CMake2-变量4-常用内置变量6:CMAKE_PREFIX_PATH【分号分隔的路径列表,指明软件/库安装路径前缀,供find_××()命令搜索使用,方便搜索可执行文件、头文件、库文件及相关配置】
命令搜索使用,这样就方便搜索可执行文件、头文件、库文件及相关配置文件等。是一个分号分隔的路径列表,用来指明软件/库安装路径前缀,以供。目录下,在使用时可以这样写。原创 2022-11-19 13:21:00 · 1892 阅读 · 0 评论 -
CMake3-常用功能1:message的使用【打印日志】【日志级别:TRACE➞DEBUG➞VERBOSE➞STATUS➞NOTICE➞WARNING➞SEND_ERROR➞FATAL_ERROR】
用户可能感兴趣的信息(默认不显示),信息前面会加前缀 –用户可能感兴趣的信息(默认显示),信息前面会加前缀 –#NOTICE等同于 none也就是不加。标准输出重定向到文件log.txt。cmake继续,不会生成项目文件。打印代码路径和行号 stderr。打开SEND_ERROR功能。标准错误输出重定向到标准输出。默认STATUS日志级别。DEBUG 加前缀 –TRACE 加前缀 –原创 2024-05-30 18:59:11 · 400 阅读 · 0 评论 -
CMake3-常用功能2:cmake调试打印生成的具体指令【方法①:cmake --build . -v;方法②:CMAKE_VERBOSE_MAKEFILE】
【代码】CMake-2-7:cmake调试打印生成的具体指令【方法①:cmake --build . -v;方法②:CMAKE_VERBOSE_MAKEFILE】原创 2024-06-04 00:07:26 · 414 阅读 · 0 评论 -
CMake3-常用功能3:cmake命令实现程序的分布生成【预处理(*.i C代码)➜编译(*.s汇编代码)➜汇编(*.o二进制代码)➜链接(*.out)➜运行(动态库加载路径)】
在 build 目录下生成构建所需的文件,准备进行编译。每一个.cpp都会生成一个。进入build目录,查看。原创 2024-06-03 23:30:20 · 249 阅读 · 0 评论 -
CMake3-常用功能4:设置输出路径【库输出路径(linux的动态库.so)、归档输出路径(linux的静态库、window的动/静态库)、执行程序输出路径(执行程序、dll动态库)】
【代码】CMake-2-8:设置输出路径【库输出路径(linux的动态库.so)、归档输出路径(linux的静态库、window的动/静态库)、执行程序输出路径(执行程序、dll动态库)】原创 2024-06-04 00:22:49 · 387 阅读 · 0 评论 -
CMake4-指令0:官方指令集合
These commands are always available.These commands are available only in CMake projects.These commands are available only in CTest scripts.These commands are deprecated and are only made available to maintain backward compatibility. The documentation of ea原创 2024-06-08 12:14:48 · 661 阅读 · 0 评论 -
CMake4-指令1-1:add_executable【基于特定的源文件(入口源文件),创建可执行文件】
该命令将添加一个名为的可执行目标,由命令调用中列出的源文件构建。对应于逻辑目标名称,在项目中必须是全局唯一的。构建的可执行文件的实际文件名基于原生平台的约定构建(例如.exe或仅仅是$默认情况下,可执行文件将在构建树目录中创建,该目录对应于调用命令的源树目录。请参阅目标属性的文档以更改此位置。请参阅目标属性的文档以更改最终文件名的部分。有关定义构建系统属性的更多信息,请参阅手册。原创 2024-06-08 12:05:47 · 687 阅读 · 0 评论 -
CMake4-指令1-2:add_library【①生成动态库或静态库;②导入已经生成的库;③创建接口库;④为库起别名】
说明:加了EXCLUDE_FROM_ALL属性的target在默认编译时不会被编译,如果要编译,需要手动编译, 比如。说明: 当不指明库的类型时,生成静态sub。为给定library添加一个别名,后续可使用。,但可能没有build过程。指定编译名为fctest。原创 2024-06-08 11:52:57 · 602 阅读 · 0 评论 -
CMake4-指令1-3:add_subdirectory【用于将子目录添加到构建】
选项,当父目录目标文件对子目录目标文件存在依赖关系时,子目录的目标文件仍然会生成以满足依赖关系。└── CMakeLists.txt #子目录的CMakeLists.txt。├── CMakeLists.txt #父目录的CMakeList.txt。├── main.cpp #源文件,包含main函数。└── test.cpp #子目录源文件。└── test.h #子目录头文件。等文件内容如上文所示,没有变化),父目录下的。选项,子目录的目标文件不会生成。原创 2022-11-19 14:16:18 · 2007 阅读 · 0 评论 -
CMake4-指令1-4:add_dependencies【当一个项目构建的时候,所以被依赖的项目总是最先构建,这样链接时就不会出现找不到库而报错】
这样写的好处在于,当一个项目构建的时候,由于依赖关系的存在,所以被依赖的项目总是最先构建,这样就不会出现找不到库而报错。原创 2022-11-20 10:53:03 · 1015 阅读 · 0 评论 -
CMake4-指令1-5:add_custom_command【将自定义构建规则添加到生成的构建系统】【鸡肋,可以将所有COMMAND写到add_custom_target中,不需要此命令来进行补充】
如果使用OUTPUT参数,需要在目标的构建中指定依赖于该OUTPUT;如果使用TARGET参数,直接指定目标就可以了。其实,可以发现,有时候略显鸡肋,因为我们可以将所有的COMMAND都写到中,不需要来进行补充。【CMake】cmake的add_custom_command和add_custom_target指令_Yngz_Miao的博客-CSDN博客cmake整理:在编译时拷贝文件之add_custom_comand 和 add_custom_target_放牛娃不吃草的博客-CSDN博客。原创 2022-11-20 10:51:35 · 1192 阅读 · 0 评论 -
CMake4-指令1-6:add_custom_target【增加一个没有输出的目标,使得它总是被构建】
在很多时候,需要在cmake中创建一些目标,如clean、copy等等,这就需要通过来指定。同时,可以用来完成对生成的target的补充。。原创 2022-11-20 10:51:58 · 6846 阅读 · 0 评论 -
CMake4-指令2-1:include【将需要在很多CMakeLists文件中复用的语句抽取出来放入.cmake文件中(如:MACRO宏、function函数)】【清单文件中的命令会被立即处理】
cmake的宏是MACRO,函数是function。COMMAND1(ARGS ...) # 命令语句...endmacro()COMMAND1(ARGS ...) # 命令语句...function()定义一个名称为name的宏(函数),arg1...是传入的参数。我们除了可以用${arg1}来引用变量变量说明argv##是一个下标,0指向第一个参数,累加argv所有的定义时要求传入的参数argn定义时要求传入的参数以外的参数argc。原创 2022-11-19 13:11:19 · 1442 阅读 · 0 评论 -
CMake4-指令2-2:include_directories(指定头文件查找路径)【将指定目录添加到编译器的“头文件”搜索路径之下】【对当前CMakeLists.txt文件的“所有”目标文件生效】
选项,会把指定目录当成系统的搜索目录。该命令作用范围只在当前的CMakeLists.txt。将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径。└── test.h #测试头文件,是个空文件,被外层的main,cpp包含。├── CMakeLists.txt #最外层的CMakeList.txt。├── main.cpp #源文件,包含被测试的头文件。来改变它默认行为,将目录添加到列表前面。命令会将目录添加到列表最后,可以通过命令设置。原创 2022-11-19 14:07:18 · 2458 阅读 · 0 评论 -
CMake4-指令3-1:target_link_libraries(链接库)【声明链接时需要参与的依赖库(例如可执行文件或其他库)】【三种链接范围:PRIVATE、PUBLIC、INTERFACE】
注意:由于一个target中包含多个属性,一般情况下包含了头文件路径。所以使用target作为参数传入此函数时,无需调用。命名的必须是由add_executable()或add_library()之类的命令创建的。:该函数声明了链接时需要参与的依赖库名称或target。其名称可包含完整路径。再次声明添加头文件路径。原创 2022-11-20 10:49:26 · 8233 阅读 · 0 评论 -
CMake20-弃用指令1:link_directories【指定第三方库所在路径】【官方不建议使用该命令,取而代之的为find_package()、find_library()】
LINK_DIRECTORIES 命令来指定第三方库所在路径,比如,你的动态库在/home/myproject/libs这个路径下,则通过命令:LINK_DIRECTORIES(/home/myproject/libs),把该路径添加到第三方库搜索路径中,这样就可以使用相对路径了,使用TARGET_LINK_LIBRARIES的时候,只需要给出动态链接库的名字就行了。官方不建议使用该命令,取而代之的为find_package() find_library()原创 2022-11-20 10:54:38 · 2839 阅读 · 0 评论 -
CMake4-指令3-2:target_link_directories(link_directories的改进版)【为特定的可执行文件或库指定链接器搜索库文件的目录】
在CMake中,链接库是构建过程中的一个重要环节,它涉及到将库文件与可执行文件或共享库文件进行连接。CMake提供了几个命令来管理链接过程,其中和就是两个常用的命令。原创 2024-06-08 14:41:52 · 1085 阅读 · 0 评论 -
CMake4-指令3-3:target_include_directories【给指定的目标文件添加头文件搜索目录,只针对指定的目标文件生效】【三种范围:PUBLIC、PRIVATE、INTERFA】
该命令给指定的目标文件添加头文件搜索目录,所以必须用add_executable()或add_library()等命令先创建出来,和include_directories的主要差别是:include_directories会对当前CMakeLists.txt文件的目标文件生效,并会通过add_subdirectory调用传递到子目录;target_include_directories则针对指定的目标文件生效。原创 2024-06-08 14:47:36 · 922 阅读 · 0 评论 -
CMake4-指令4-1:find_library【用于查找并配置较小或没有.cmake配置文件的库】【不依赖库提供的.cmake配置文件,需要手动指定文件路经、头文件】
该命令用于查找库(动态库或者静态库),当构建依赖于第三方库/系统库,可以使用该命令来查找并使用库(Cmake中有另外一个命令,能获取库的更多信息)简洁的格式通用的格式NO_CACHEsetnamelibLinux.so.aMac.dylibmymathpath。原创 2022-11-19 13:41:59 · 14013 阅读 · 0 评论 -
CMake4-指令4-2:find_package【用于查找并配置复杂的第三方软件包】【通过查找第三方库的.cmake的文件,并不是直接去找具体的动态库文件和头文件】【指定第三方库所在路径】
用于查找包(通常是使用三方库),并返回关于包的细节(使用包所依赖的头文件、库文件、编译选项、链接选项等)与直接在指定搜索目录下搜索库不同,命令可以获取更多的信息,那么它的搜索方式也是与不一样,它有两种不同的搜索方式,因此在介绍这个命令的细节之前,先简单介绍一下()和()。原创 2022-11-19 13:31:22 · 8582 阅读 · 0 评论 -
CMake4-指令5:install【指定在安装时运行的规则;这里的“安装”,install这个说法,倒觉得有点不是很准确,倒是和复制比较类似】
在cmake那么,的时候,是需要我们定义一个install的目标么?显然并不需要,作为一个经常需要被运行的指令,官方提供了一个命令install,只需要经过该命令的安装内容,不需要显示地定义install目标。此时,就是运行该命令的内容。有时候,也会用到一个非常有用的变量。用法如:在CMakeLists.txt中添加。原创 2022-11-20 10:47:16 · 1516 阅读 · 0 评论 -
CMake4-指令6-1:Option【编译开关的作用,控制编译流程,相当于C语言的宏条件编译】【option之前的语句,变量按未定义处理;之后的语句,变量才被定义】【变量取值:ON/OFF】
CMake中的option用于控制编译流程,相当于C语言中的宏条件编译。cmake中option起到编译开关的作用,CMakeLists.txt中option以前的语句,变量按未定义处理,option之后的语句,变量才被定义。另外,注意,option命令定义的变量不影响c或c++中#ifdef或者#ifndef逻辑判断,具体见案例代码。原创 2022-11-20 11:10:22 · 1449 阅读 · 0 评论 -
CMake4-指令6-2:Option缓存清除【设置过的option参数会缓存起来,如果不删除即使修改也不生效】【删除缓存:unset(OPTION_WITH_DEV_LIB CACHE)】
【代码】CMake4-指令6-2:Option缓存清除【设置过的option参数会缓存起来,如果不删除即使修改也不生效】【删除缓存:unset(OPTION_WITH_DEV_LIB CACHE)】原创 2024-06-23 01:01:08 · 300 阅读 · 0 评论