编写cmakelists文件常用语句
aux_source_directory(路径 变量名)搜索路径下的源文件,存储到变量,${ }取值。add_library(库名字 STATIC/SHARED 源文件) 制作静态库/动态库,名字为lib+库名字+.a/so。target_link_libraries(可执行程序名动态库名字)程序链接动态库/静态库。link_directories( path )若静态库/动态库不是系统的,需要将
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里定义好变量并且添加子目录,子节点直接使用。
子节点先添加源文件和头文件,链接静态库,然后生成可执行文件。
静态库直接打包到可执行程序里,占内存,但方便;动态库节省内存,但需要和可执行程序一起发布。
更多推荐
所有评论(0)