cmake_minimum_required (VERSION 3.10)   指定最小版本

project(XXXX)       指定项目名字               

---------------

set(MAIN_EXEC_NAME dwarf_parser)   定义变量

${ MAIN_EXEC_NAME }   变量取值

set(CMAKE_CXX_STANDARD 14) 指定c++14标准,还有11、17、20等标准

set(EXECUTABLE_OUTPUT_PATH  ../bin)  指定输出的路径(绝对路径)

aux_source_directory(路径 变量名)  搜索路径下的源文件,存储到变量,${ }取值              

或者

file(GLOB /GLOB_RECURSE  SRCS  "path/*.cc")   搜索路径下的cc文件存储到变量

file的参数:GLOB 搜索当前目录;GLOB_RECURSE 递归搜索当前目录和子目录

include_directories(include)  指定源文件需要的头文件在的目录

--------------------------

set(LIBRARY_OUTPUT_PATH  ../home)  指定库文件生成到的路径

add_library(库名字 STATIC/SHARED 源文件) 制作静态库/动态库,名字为lib+库名字+.a/so

target_link_libraries(可执行程序名  动态库名字)  程序链接动态库/静态库

link_libraries(静态库名字libxxx.a/xxx)  链接静态库

link_directories( path )  若静态库/动态库不是系统的,需要将路径指定出来

add_executable(可执行程序名  源文件名)   生成可执行程序

动态库权限有PUBLIC 库传递多次/ PRIVATE 库传递一次/ INTERFACE 不传递,只链接库里

--------------------------

message(“xxx”)  显示消息

前缀[无]代表重要消息,STATUS 非重要信息,FATAL_ERROR 错误并终值所有处理

#ifdef DEBUG

  Xxx

#endif

程序测试时候,加入宏定义控制代码是否生效

gcc test.c -DDEBUG  或者 add_definitions(-D宏名字)  可以编译时定义宏

-------------------------

Cmake的嵌套,在根节点的cmake里定义好变量并且添加子目录,子节点直接使用。

子节点先添加源文件和头文件,链接静态库,然后生成可执行文件。

静态库直接打包到可执行程序里,占内存,但方便;动态库节省内存,但需要和可执行程序一起发布。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐