cmake记录 摘自网络
CMake——第三方库引入
对于大型工程项目,我们往往需要引入一些第三方库来帮助我们更好的解决问题,对于第三方库,有的是编译好的,有的是源码,情况不同,处理方式不同,由于笔者这方面也是刚入门,所以在此记下笔记,以备后续需要.
1.对于有.cmake的第三方库:
list(APPEND CMAKE_PREFIX_PATH "./thirdParty/opencv/build") #.cmake所在路径 find_package(OpenCV REQUIRED) add_executable(project main.cpp)
target_link_libraries(project ${OpenCV_LIBS}) #将exe与第三方库链接
2.对于需要源码编译(例如src文件夹中含有一堆.h,.cpp文件等)
file(GLOB_RECURSE <变量名> "src/.hpp" "src/.cpp" "src/.h" "src/.c")
add_library(<库名> STATIC ${变量名})
3.对于已经编译好的第三方库
add_library(<库名> INTERFACE IMPORTED) #将已编译好的include和lib封装成你想要的库target_include_directories(<库名> INTERFACE <include文件夹所在路径>)
target_link_directories(<库名> INTERFACE <lib文件夹所在路径>)
target_link_libraries(<库名> INTERFACE <需要的.lib文件>)
4.将很多第三方库统一放在一个文件夹 “thirdparty” 下
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_target_properties(<库名> PROPERTIES FOLDER "thirdparty")
转自下面
作者:Derek_a223
链接:https://www.jianshu.com/p/8b0a0dad2620
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
file(GLOB variable [RELATIVE path] [globbingexpressions]…)
使用该文件操作命令时,相对路径的书写最前面不要加任何修饰,
如:“FILE(GLOB EXTENDED doc/**)”,加载doc文件夹下的所有文件;
习惯错误写法FILE(GLOB EXTENDED /doc/)、FILE(GLOB EXTENDED ./doc/)。
————————————————
版权声明:本文为CSDN博主「justslowdown_going」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/siwen0/article/details/102564310
include_directories(./include) #默认在build下cmake
get_property(dirs DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
message(STATUS "include_dirs:"${dirs})
增加多个源文件多个目录下不使用静态库的处理
https://github.com/wzpan/cmake-demo/pull/10/commits/1bc2ec4aa63ead70f5a03677cf06c130d98a6504
add_definitions()
这种可以在我们更改别人代码做实验时使用,既不对其源码进行破坏,又可以添加自己的功能。之前都是在程序中进行#define,有了这个后可以直接在编译的时候进行选择。具体的,在工程CMakeLists.txt 中,使用add_definitions()函数控制代码的开启和关闭:
option(TEST_DEBUG "option for debug" OFF)
if (TEST_DEBUG)
add_definitions(-DTEST_DEBUG)
endif(TEST_DEBUG)
运行构建项目的时候可以添加参数控制宏的开启和关闭.
cmake -DTEST_DEBUG=1 .. #打开
cmake -DTEST_DEBUG=0 .. #关闭
在源码中就可以使用:
#ifdef TEST_DEBUG
...
...
#else
...
#endif
————————————————
原文链接:https://blog.csdn.net/fb_941219/article/details/107376017
命令行给cmake传递参数
我们期望在编译前将一些信息缓存起来,然后用CMakeLists.txt进行构建时,希望可以访问之前缓存给cmake的变量:
比如我们希望缓存TARGET_CPU,并且他的值为X86,那么我们可以在命令行或者脚本中执行一下操作:
cmake -DTARGET_CPU:STRING=x86
然后,我们就可以在CMakeLists.txt中使用他帮助我们完全一些逻辑:
if(TARGET_CPU STREQUAL "x86")
#do something
else()
#do something
endif()
————————————————
原文链接:https://blog.csdn.net/KingOfMyHeart/article/details/114326024
https://github.com/AdamWSL/CMake_Tutorial.git
2.cmake下载地址
https://cmake.org/download/
3.CMake官方教程— CMake 3.17.0-rc1文档
https://cmake.org/cmake/help/latest/guide/tutorial/index.html
4.CMake入门实战(看完这篇再看视频效果更佳)
https://www.hahack.com/codes/cmake/
5.cmake使用示例与整理总结
https://blog.csdn.net/QTVLC/article/details/82380413
6.CMake命令/函数汇总(翻译自官方手册)
https://www.cnblogs.com/52php/p/5684588.html
7.《CMake实践》
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现