cmake主要语句用法(temp)

https://zhuanlan.zhihu.com/p/698860026

先看完上这面几个例子,再看下面的几个关键词基本就差不多了:

https://zhuanlan.zhihu.com/p/653279430 这个看前面几段可以帮助熟悉。写的有点多,后面感觉不是很实用。

我这个就写的比较乱了,主要是自己理解的也不是很透彻,了解啥先写点啥,后面了解多了,再完善。看了这些,基本能看懂cmakelist.txt文档了。编译报错基本也能知道啥原因吧。

file();

主要是读/写/下载/查找指定路径下的文件。常用的是按正则匹配查找到相应文件:file(GLOB 存找到的文件路径的变量名 查找的路径)。(GLOB_RECURSE可以递归搜,就是指还能搜目录里子文件夹,子子文件夹)

include:

将其他CMake文件或模块包含到当前文件中。

首先在当前目录查找指定的文件,如果没有找到,它还会根据 CMAKE_MODULE_PATH 和系统默认路径继续查找。

include_directories:

用于指定头文件的搜索路径。这个命令告诉CMake在哪些目录下查找头文件

可以在项目的CMakeLists.txt文件中使用include_directories命令来添加额外的包含路径。例如,include_directories(/path/to/library/include)将确保编译器在编译时能够找到该路径下的头文件‌

find_package()

查找的是.cmake文件(.cmake文件里包含了CMake命令和一些宏/函数)。在CMAKE_MODULE_PATH路径下。这个路径是cmake内置的一个变量,默认值是?

CMAKE_MODULE_PATH 详解

1、CMAKE_MODULE_PATH 是 CMake 中的一个变量,用于指定 CMake 查找模块文件(.cmake文件)时的搜索路径。

2、默认情况下,CMake 会在其内置的模块路径 (例如 CMake 安装目录下的 Modules文件夹) 中搜索模块文件。如果你有自定义的模块文件 (比如项目中某些特定的查找模块),就可以通过设置 CMAKE_MODULE_PATH 来告诉CMake 在何处查找这些文件。

3、CMAKE_MODULE_PATH 可以包含一个或多个路径。你可以在 CMakeLists.txt 文件中使用 set 命令来设置这个变量。例如:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules) 

${CMAKE_MODULE_PATH}:这里用到了变量替换,表示当前 CMAKE_MODULE_PATH 变量的值。通过将它放在前面,你可以保持之前的路径设置,而不会覆盖它。

${CMAKE_SOURCE_DIR}/cmake/modules:这是您想要添加的新路径,CMAKE_SOURCE_DIR 代表项目的根目录。通过组合这个路径,您可以指定一个相对路径或绝对路径,具体取决于 CMAKE_SOURCE_DIR 的值。

这行代码会将项目源目录下的 cmake/modules 添加到CMAKE_MODULE_PATH 中。这样,CMake 在查找模块时会首先检查这个目录                       
原文链接:https://blog.csdn.net/jidushanbojueA/article/details/140641327

add_executable();

将一个源码编译为可执行的目标文件,和target_link_directories()一起用。

为特定的目标(可执行文件或库)指定链接器搜索库文件的目录,而不是影响所有的目标。

  1. add_executable(my_program main.cpp)
  2. target_link_directories(my_program PRIVATE /path/to/lib)

在这个例子中,/path/to/lib目录只会被用于搜索my_program的链接库。其他目标不会受到影响。

add_library():

构建一个库供他人使用。完成这个任务需要用到ADD_LIBRARY()。

SET(LIBHELLO_SRC hello.c) ;//
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC});//动态库
ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC});//静态库

link_directories()、tartget_link_directories();

这两个是一伙的,tartget……这个更具体,针对具体目标指添加需要库的查找路径。没有tartget的是添加全局的搜索路径。

link_directories("/home/server/third/lib")指定了在/home/server/third/lib目录下查找链接时需要的库文件。

link_libraries

作为全局链接库设置,需要在add_library或者add_executable命令之前使用

而target_link_libraries为特定的目标指定链接库,则需要在add_library或者add_executable命令之后使用。

install():       

 概述【将构建的目标(如可执行文件、库等)和其他相关文件(如头文件、配置文件等)安(拷)装(贝)到指定的位置】

g++常用参数 -I -L -l

-I(大写的i):-I参数是用来指定头文件所在目录。
/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了。
-L(大写的l):-L参数跟着的是库文件所在的目录。
-l(小写的L):-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名。
ldd: ldd用来打印或者查看程序运行所需的共享库
原文链接:https://blog.csdn.net/weixin_43774168/article/details/125991669

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值