cmake使用方法(详细)

cmake使用方法(详细),第1张

例子

在 cmake 脚本中,设置编译选项可以通过 add_compile_options 命令,也可以通过 set 命令修改 CMAKE_CXX_FLAGS 或 CMAKE_C_FLAGS 。

使用这两种方式在有的情况下效果是一样的,但请注意它们还是有区别的:

例子

也可以直接在编译的时候指定:

语法

待补充

语法

在CMake中基础的数据形式是字符串。CMake也支持字符串列表。

列表通过分号分隔。譬如两个声明给变量VAR设同样的值:

字符串列表可以通过foreach命令迭代或直接 *** 控列表命令。

CMake 支持简单的变量可以是字符串也可以是字符串列表。变量参考使用 ${VAR} 语法。多参数可以使用 set 命令组合到一个列表中。所有其他的命令

通过空白分隔符传递命令来扩展列表,例如

像大多数语言一样,Cmake 提供了控制流结构。Cmake提供了三中控制流:

更多控制流信息参见命令 if,while,foreach,macro,function文档。

在CMake中原义字符串用双引号括起来。字符串可以是多行字符串,并在其中嵌入新的行。例如

也可以在一个字符串中转义字符和使用变量

同样支持标准C中的转义

如果字符在引号之前是空格则原义字符串只是原义字符串。但是引号必须成对,例如

cmake可以使用正则表达式

cmake project 头文件必须存在这行命令, 例如 cmake_minimum_required(VERSION 3.10)

设置项目名称 project(Tutorial)

语法

例子

语法

将指定的源文件(CPP文件)生成链接文件,然后添加到工程中去。

语法

其中 <name>表示库文件的名字,该库文件会根据命令里列出的源文件来创建。而 STATIC 、 SHARED 和 MODULE 的作用是指定生成的库文件的类型。

例子

在子文件夹添加了 library 或者 executable 之后,在上层目录添加 subdirectory , 也可以在同一个CMakeList.txt中使用

它相当于 g++ 选项中的 -I 参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用。

语法:

它相当于 g++ 命令的 -L 选项的作用,也相当于环境变量中增加 LD_LIBRARY_PATH 的路径的作用。

语法:

语法:

该指令的作用主要是指定要链接的库文件的路径,该指令有时候不一定需要。因为find_package和find_library指令可以得到库文件的绝对路径。不过你自己写的动态库文件放在自己新建的目录下时,可以用该指令指定该目录的路径以便工程能够找到。

语法:

link_libraries(library1 <debug | optimized>library2 ...)

可以链接一个,也可以多个,中间使用空格分隔.

语法:

语法:

简单的例子如下:

一般情况下, make install 在不指定 prefix 默认安装在`/usr/local/bin

注释:以 # 开头

cmake_minimum_required(VERSION 3.4.1) #设置Cmake最小版本

ADD_EXECUTABLE(exeNme 源码位置) #编译为可执行程序

add_library(libName STATIC 源码位置) # 生成静态链接库

add_library(libName SHARED 源码位置) # 生成动态链接库

SET(变量名 变量值) #设置变量

例如:

SET(srcDir main.c) 等价于 srcDir = "main.c"

SET(srcDir main.c demo.c test.c) 等价于 srcDir = "main.c demo.c test.c"

add_executable(debugger ${srcDir})#用 美元符号 使用变量

include_directories(路径)#设置头文件搜索路径,以CmakeLists.txt所在目录为根目录.

源文件中可以使用 <>来引入自己的头文件了,与引入标准库头文件保持格式的一致

例如:

include_directories(header) 则,源码中使用头文件的时候会从CmakeLists.txt所在目录/header 中去寻找

add_subdirectory(mod1 lib)#执行 mod1/CmakeLists.txt文件,并且把输出文件放在lib文件夹,同时会把lib文件夹作为链接库的搜索位置

link_directories(${PROJECT_SOURCE_DIR}/build/lib)#指明链接库的位置,如果程序要使用链接库,请一定要将此命令尽量写的靠前一些,要不然有时候会找不到链接库.我也不知道为什么....

target_link_libraries(exeName libName)#链接 libName,注意,链接之前要指明链接库的位置,如果libName代表动态链接库,则运行的时候需要把它拷贝到exeName同目录下

如果运行程序涉及到了动态链接库,则运行到时候需要把动态链接库拷贝到运行程序所在的文件夹.

例如:

静态链接库 A

静态链接库 B

动态链接库 C

可执行程序 D

A依赖B和C

D依赖A,

则D运行的时候需要把B和C一起拷贝到其目录下.注意,B是静态的,依然要拷贝过去.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6049531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-13
下一篇 2023-03-13

发表评论

登录后才能评论

评论列表(0条)

保存