
Cmake
文章平均质量分 68
Cmake的使用
物随心转
子曰:“学而时习之,不亦说乎?”
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
tool.cmake文件的使用
cmake原创 2023-01-10 21:19:49 · 309 阅读 · 0 评论 -
CMake 指定链接选项
cmake原创 2023-01-10 20:45:56 · 11735 阅读 · 0 评论 -
Cmake之ExternalProject_Add
cmake原创 2023-01-04 21:56:18 · 2095 阅读 · 0 评论 -
CMake之引入git项目,使用FetchContent ( 3.14 以上版本)
cmake原创 2023-01-04 21:40:36 · 2191 阅读 · 0 评论 -
Cmake的重新编译
cmake原创 2022-12-28 21:40:16 · 7422 阅读 · 2 评论 -
CMAKE_INSTALL_PREFIX
cmake原创 2022-12-28 21:31:53 · 10023 阅读 · 2 评论 -
Cmake命令之target_compile_options
Cmake target_compile_option 参考:target_compile_options — CMake 3原创 2022-06-22 21:39:00 · 11158 阅读 · 0 评论 -
Cmake的option与cmake_dependent_option
一、介绍cmake提供了一组内置宏,用户可以自己设置。只有当该集合中的其他条件为真时,该宏才会向用户提供一个选项。语法include(CMakeDependentOption)CMAKE_DEPENDENT_OPTION(USE_FOO "Use Foo" ON "USE_BAR;NOT USE_ZOT" OFF)如果USE_BAR为true而USE_ZOT为false,则提供一个默认为ON的选项USE_FOO。否则,它将USE_FOO设.原创 2022-05-08 22:41:00 · 4016 阅读 · 0 评论 -
add_library使用 $<TARGET_OBJECTS:name>
前面介绍了add_library的两种格式,今天分享一个实例,Cmake分别生成静态链接库,动态链接库,OBJ链接库。文件目录如下CmakeList文件# set minimum cmake versioncmake_minimum_required(VERSION 3.5 FATAL_ERROR)# project name and languageproject(recipe-03 LANGUAGES CXX)# generate an object library fro原创 2022-05-08 22:20:55 · 4223 阅读 · 0 评论 -
cmake的file命令
一、介绍CMake的文件操作命令Reading file(READ <filename> <out-var> [...]) file(STRINGS <filename> <out-var> [...]) file(<HASH> <filename> <out-var>) file(TIMESTAMP <filename> <out-var> [...])Writing原创 2022-03-30 22:22:31 · 9194 阅读 · 0 评论 -
cmake命令之set_property和get_property
一、set_property:在指定域中设置一个命名属性set_property(<GLOBAL | DIRECTORY [dir] | TARGET [target1 [target2 ...]] | SOURCE [src1 [src2 ...]] |原创 2022-03-29 22:42:31 · 8012 阅读 · 0 评论 -
cmake命令之foreach
一、介绍遍历容器的所有元素,它有四种形式遍历list所有元素 从零开始到目标结果,stop不可为负数,默认步长为1 存在起始位置和截至位置的跳动,左右都是闭区间,步长可指定,默认为1 多集合的并集二、遍历list所有元素语法foreach(<loop_var> <items>) <command>endeach()举个例子set(LIST_SRC a.cpp b.cpp c.cpp)foreach(item ${LIST_SRC.原创 2022-02-27 22:03:35 · 3347 阅读 · 0 评论 -
cmake命令之set
一、介绍et命令可以设置普通变量、缓存条目、环境变量三种变量的值,分别对应以下三种命令格式。set的值<value>...表示可以给变量设置0个或者多个值,当设置多个值时(大于2个),多个值会通过分号连接符连接成一个真实的值赋值给变量,当设置0个值时,实际上是把变量变为未设置状态,相当于调用unset命令。set(<variable> <value>... [PARENT_SCOPE]) #设置普通变量set(<variable> <val转载 2022-02-25 23:35:47 · 19501 阅读 · 3 评论 -
cmake命令之list
一、介绍cmake的list命令即对列表的一系列操作,cmake中的列表变量是用分号;分隔的一组字符串,创建列表可以使用set命令(参考set命令),例如:set (var a b c d)创建了一个列表 "a;b;c;d",而set (var "a b c d")则是只创建了一个变量"a c c d"。list命令的具体格式根据子命令不同会有所区别。下面是list提供的命令 list(LENGTH <list><output variable>) lis原创 2022-02-23 23:32:41 · 9023 阅读 · 0 评论 -
CMake选择编译器及设置编译器选项
一、设置编译器的版本在实际的项目平台中可能安装有多个版本的编译器,同时由于不同的功能可能会需要设置不同的编译参数,可以通过如下方式设置编译器的版本1、直接在命令行中指定cmake .. -DCMAKE_CXX_COMPILER=/usr/local/gcc/bin/g++2、在配置文件中指定set (CMAKE_C_COMPILER "/usr/local/gcc/bin/gcc")set (CMAKE_CXX_COMPILER "/usr/local/gcc/bin/g++")转载 2022-02-15 22:11:08 · 22174 阅读 · 3 评论 -
Cmake命令之add_subdirectory
一、介绍该命令是添加一个子目录并构建该子目录,命令格式为add_subdirectory (source_dir [binary_dir] [EXCLUDE_FROM_ALL])命令解析source_dir必选参数。该参数指定一个子目录,子目录下应该包含CMakeLists.txt文件和代码文件。子目录可以是相对路径也可以是绝对路径,如果是相对路径,则是相对当前目录的一个相对路径。 binary_dir可选参数。该参数指定一个目录,用于存放输出文件。可以是相对路径也可以是绝对路径,如果是转载 2022-01-24 08:46:30 · 20195 阅读 · 1 评论 -
cmake的install
一、介绍该命令为项目生成一系列的安装规则。在安装过程中,源目录调用此命令时,所指定的规则会被依次执行。该命令为install(TARGETS targets... [EXPORT <export-name>] [[ARCHIVE|LIBRARY|RUNTIME|FRAMEWORK|BUNDLE| PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE] [DESTINATION <dir>]原创 2022-01-15 22:57:46 · 7728 阅读 · 0 评论 -
CMakeLists编译静态库与动态库
一、编写一个库编写一个计算整数和浮点数之和的库函数mymath,文件目录mymath.h#ifndef MYMATH_H#define MYMATH_Hint add(int, int);double add(double, double);#endifmymath.cc#include "mymath.h"int add(int a, int b){ return a+b;}double add(double a, double b){ .原创 2022-01-15 22:42:42 · 8616 阅读 · 0 评论 -
gcc的-l参数,-L参数,-I参数
一、基础知识链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件。在链接过程中,它必须把符号(变量名、函数名等一些列标识符)用对应的数据的内存地址(变量地址、函数地址等)替代,以完成程序中多个模块的外部引用。标准库的大部分函数通常放在文件 libc.a 中(文件名后缀.a代表“achieve”,译为“获取”),或者放在用于共享的动态链接文件 libc.so 中(文件名后缀.so代表“share object”,译为“共享对象”)。这些链接库一般位于 /lib/ 或 /us原创 2022-01-15 18:53:15 · 11135 阅读 · 2 评论 -
configure/make/make install的作用
安装原码程序时,都要执行三步:1./configure 2 make 3 make install下面做个介绍1、configure这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如./configure --prefix=/usr上面的意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(原创 2022-01-15 17:16:50 · 1025 阅读 · 0 评论 -
cmake的aux_source_directory
一、背景在同一目录下面,有多个源文件的时候,这个时候你不能都往下面第三条命令里面一直手动添加源文件,那工作效率多低啊cmake_minimum_required(VERSION 2.8)project(main)add_executable(main main.c test1.c)这里就可以使用 aux_source_directory命令二、定义aux_source_directory 查找在某个路径下的所有源文件格式aux_source_directory(&l.原创 2022-01-07 22:37:29 · 23974 阅读 · 0 评论 -
cmake的function
一、定义cmake中定义一个函数,命令如下function(<name> [<arg1> ...]) <commands>endfunction()定义一个名为<name>的函数,参数名为<arg1>,…函数定义中的<命令>被记录;直到函数被调用,它们才被执行。二、使用定义函数function(foo) <commands>endfunction()调用foo()Foo()原创 2021-12-26 22:42:10 · 1757 阅读 · 8 评论 -
cmake的macro
一、定义可以把它理解为C++的宏,命令如下macro(<name> [<arg1> ...]) <commands>endmacro()定义一个名为<name>的宏,它接受名为<arg1>,…等一系列的参数。macro与endmacro之间列出的命令,在宏被调用之前不会执行。二、使用macro(bar) foreach(arg IN LISTS ARGN) <commands> endfor原创 2021-12-26 22:27:58 · 1957 阅读 · 0 评论 -
cmake的-G 参数
一、介绍CMake默认根据平台选择一个生成器。通常,默认生成器足以让用户继续构建软件。用户可以使用-G选项覆盖默认生成器:$ cmake .. -G Ninjacmake --help的输出包括一个可供用户选择的生成器列表。注意,生成器名称是区分大小写的。二、细节在类Unix系统(包括Mac OS X)上,默认情况下使用Unix Makefiles生成器。该生成器的一个变体也可以在Windows的各种环境中使用,比如NMake Makefiles和MinGW Makefiles生成原创 2021-12-25 21:52:20 · 16320 阅读 · 0 评论 -
cmake命令之add_dependencies
一、介绍在顶级目标之间添加一个依赖项。格式add_dependencies(<target> [<target-dependency>]...)使顶级<目标>依赖于其他顶级目标,以确保它们在<目标>之前构建。顶级目标是由add_executable()、add_library()或add_custom_target()命令创建的二、实例假设我们需要生成一个可执行文件,该文件生成需要链接a.so b.so c.so d.so四个动态库原创 2021-12-06 22:29:48 · 3017 阅读 · 1 评论 -
CMake命令之add_custom_comand 和 add_custom_target
一、add_custom_comand的介绍命令的功能:向生成的系统中添加自定义生成规则。命令格式add_custom_command(OUTPUT output1 [output2 ...] COMMAND command1 [ARGS] [args1...] [COMMAND command2 [ARGS] [args2...] ...] [MAIN_DEPENDENCY de原创 2021-12-05 22:41:21 · 2654 阅读 · 3 评论 -
CMake的add_library与target_link_libraries
一、add_library介绍add_library命令的格式add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [<source>...])添加一个名为<name>的库目标,从命令调用中列出的源文件构建。<name>对应于逻辑目标名称,并且在项目中必须是全局唯一的。所构建的库的实际文件名是根据本机平台的约定构造的 ...原创 2021-12-05 22:19:30 · 33886 阅读 · 2 评论 -
cmake命令之target_include_directories
一、介绍命令格式target_include_directories(<target> [SYSTEM] [AFTER|BEFORE] <INTERFACE|PUBLIC|PRIVATE> [items1...] [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])该命令指定目标包含的头文件路径。命名的<目标>必须是由add_executable()或add_library()之类的命令创建的,并原创 2021-12-04 11:47:01 · 34037 阅读 · 0 评论 -
cmkae命令set_target_properties
一、介绍命令的格式如下set_target_properties(target1 target2 ... PROPERTIES prop1 value1 prop2 value2 ...)Sets properties on targets. The syntax for the command is to list all the targets you want to change, and then原创 2021-12-04 11:28:01 · 21897 阅读 · 0 评论 -
Cmake命令之include_directories介绍
一、介绍 命令格式 include_directories ([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...]) 将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径。 命令解析 默认情况下,include_directories命令会将目录添加到列表最后,可以通过命令设置CMAKE_INCLUDE_DIRECTORIES_BEFORE变量为ON来改变它默认行为,将目录添加到列表前面。也可以在每次调用incl转载 2021-12-01 22:32:51 · 35892 阅读 · 2 评论 -
CMake的内置变量与message打印的用法
一、预定义变量 PROJECT_SOURCE_DIR 工程的根目录 PROJECT_BINARY_DIR 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/build CMAKE_INCLUDE_PATH 环境变量,非cmake变量 CMAKE_LIBRARY_PATH 环境变量 CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.txt所在的路径 CMAKE_CURRENT_BINARY_DIR ta...原创 2021-12-01 22:10:45 · 7825 阅读 · 1 评论 -
常用的gcc程序保护命令
NX:-z execstack / -z noexecstack (关闭 / 开启)不让执行栈上的数据,于是JMP ESP就不能用了Canary:-fno-stack-protector /-fstack-protector / -fstack-protector-all(关闭 / 开启 / 全开启)栈里插入cookie信息PIE:-no-pie / -pie (关闭 / 开启)地址随机化,另外打开后会有get_pc_thunkRELRO:-z norelro / -z lazy / -.转载 2021-11-30 22:11:08 · 2091 阅读 · 0 评论 -
Linux与Windows下CMake的安装与编译
CMake是一个允许开发者编写一种平台无关的 CMakeList.txt 文件,来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。一、Linux下安装在linux环境下打开网页浏览器,输入网址:https://cmake.org/download/,找到最新版本的位置。使用源码安装ta原创 2020-09-05 19:16:53 · 3794 阅读 · 0 评论 -
CMake在Windows与Linux下的使用
一、cmake的使用步骤写程序大体步骤为:1.用编辑器编写源代码,如.c文件。2.用编译器编译代码生成目标文件,如.o。3.用链接器连接目标代码生成可执行文件,如.exe。在Linux下编译命令mkdir buildcd buildcmake ..make在windows下编译命令mkdir buildcd buildcmake -G"Unix Makefiles" ../make本文的demo都是在windows下,使用gcc测试。如果你要使用gcc原创 2021-07-25 12:51:18 · 5542 阅读 · 0 评论 -
MakeFile详解
一、背景一般来说,无论是 C、 C++,首先要把源文件编译成中间代码文件,在 Windows 下也就是 .obj 文件, UNIX 下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的 Object File 合成执行文件,这个动作叫作链接(link)。编译时,编译器需要的是语法的正确,函数与变量的声明的正确。通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在 C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一原创 2020-12-07 09:01:02 · 2582 阅读 · 0 评论 -
gcc常用命令的使用
一、定义在windows中,我们编译C++都是使用vs2017直接编译生成exe文件。其实,我们也可以不用vs2017,直接使用记事本编写一个cpp文件,使用gcc来编译该cpp文件,生成exe文件。Linux类似,使用gcc编译C文件在使用gcc编译程序时,编译过程可以细分为4个阶段:● 预处理(Pre-Processing)● 编译(Compiling)● 汇编(Assembling)● 链接(Linking)Linux程序员可...原创 2020-09-03 22:23:56 · 2543 阅读 · 0 评论 -
Linux下生成和使用C++的静态库和动态库
一、什么是库windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。二、库的种类Linux下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。共享库的代码是在可执行程序运行时才载入内存的, 在编译过程中仅原创 2020-10-29 08:41:06 · 2695 阅读 · 1 评论